Vueの7つの値転送メソッドの詳細な説明

Vueの7つの値転送メソッドの詳細な説明

1. 父から息子へ

子コンポーネントにpropsフィールドを定義し、その型は配列です (フィールド値の型を制限する必要がある場合は、オブジェクトの形式で定義することもできます)。以下の例に示すように、親コンポーネントは子コンポーネントHelloWorldをマウントし、コンポーネント タグのtitle値を割り当て、子コンポーネントHelloWorld titleという値を含むpropsを定義して、子コンポーネントが親コンポーネントの値を使用できるようにします。

親コンポーネント

<テンプレート>
 <div>
 <HelloWorld:title="メッセージ" />
 </div>
</テンプレート>

<スクリプト>
「../components/HelloWorld.vue」からHelloWorldをインポートします。

エクスポートデフォルト{
 名前: "ホーム",
 データ() {
 戻る {
  メッセージ: 「音楽を検索」、
 };
 },
 コンポーネント:
 こんにちは世界、
 },
};
</スクリプト>

サブコンポーネント

<テンプレート>
 <div class="hello">
 <h1>{{ タイトル }}</h1>
 </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 名前: "HelloWorld",
 プロパティ:["タイトル"],
 データ() {
 戻る {};
 },
};
</スクリプト>

2. 息子から父へ

子から親に値を渡すには、子コンポーネントでイベントをトリガーする必要があります。イベントでは、 $emit('父組件的方法名', '傳遞的值')を呼び出し、カスタム イベントを通じて親コンポーネントで渡された値を受け取ります。

サブコンポーネント

<テンプレート>
 <div class="hello">
 <h1 @click="add">{{ タイトル }}</h1>
 </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 名前: "HelloWorld",
 プロパティ: ["タイトル"],
 データ() {
 戻る {
  年齢:18
 };
 },
 メソッド: {
 追加(){
  this.$emit("childEvent", this.age);
 }
 },
};
</スクリプト>

親コンポーネント

<テンプレート>
 <div>
 <HelloWorld @childEvent="親イベント" :title="メッセージ" />
 </div>
</テンプレート>

<スクリプト>
「../components/HelloWorld.vue」からHelloWorldをインポートします。

エクスポートデフォルト{
 名前: "ホーム",
 データ() {
 戻る {
  メッセージ: 「音楽を検索」、
 };
 },

 メソッド: {
 親イベント(e) {
  コンソールログ(e);
 },
 },
 コンポーネント:
 こんにちは世界、
 },
};
</スクリプト>

3. ブラザーコンポーネント値の転送

1. まずbus.jsファイルを作成し、データを送信するための中間層として機能するVueインスタンスをbus.js内にnew

'vue' から Vue をインポートします。
デフォルトの新しい Vue をエクスポートします。

2. コンポーネント A にbus.jsを導入し、 bus.$emit('事件名','參數')を通じてパラメータを渡します。

<テンプレート>
 <div class="hello">
 <h1 @click="add">{{ タイトル }}</h1>
 </div>
</テンプレート>

<スクリプト>
「../publicFn/bus.js」からバスをインポートします。

エクスポートデフォルト{
 名前: "HelloWorld",
 プロパティ: ["タイトル"],
 データ() {
 戻る {
  年齢:18
 };
 },
 メソッド: {
 追加(){
  バス。$emit("childEvent", this.age);
 }
 },
};
</スクリプト>

3. $on('事件名', function(){})使用して、コンポーネントBのmountedサイクルで受信します。

<テンプレート>
 <div id='スワイパー'>
 <button>私はボタンです</button>
 </div>
</テンプレート>

<スクリプト>

「../publicFn/bus.js」からバスをインポートします。

エクスポートデフォルト{
 名前:'スワイパー',
 データ (){
 戻る {

 }
 },
 マウントされた(){
 バス.$on("childEvent", (e) => {
  コンソール.log(e)
 })
 }
}
</スクリプト>

4. 親コンポーネントは子コンポーネントのデータとメソッドを使用する

1.サブコンポーネントタグにref属性を記述する

2. 親コンポーネントはthis.$refs.id.方法名またはthis.$refs.id.屬性名を通じて子コンポーネントにアクセスできます。

親コンポーネント

<テンプレート>
 <div>
 <HelloWorld:title="メッセージ" ref="こんにちは" />
 <button @click="parentEvent">私は父親です</button>
 </div>
</テンプレート>

<スクリプト>
「../components/HelloWorld.vue」からHelloWorldをインポートします。

エクスポートデフォルト{
 名前: "ホーム",
 データ() {
 戻る {
  メッセージ: 「音楽を検索」、
 };
 },

 メソッド: {
 親イベント() {
  this.$refs.hello.add();
  console.log(this.$refs.hello.age);
 },
 },
 コンポーネント:
 こんにちは世界
 },
};
</スクリプト>

サブコンポーネント

<テンプレート>
 <div class="hello">
 <h1>{{ タイトル }}</h1>
 </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 名前: "HelloWorld",
 プロパティ: ["タイトル"],
 データ() {
 戻る {
  年齢:18
 };
 },
 メソッド: {
 追加(){
  console.log("私は子コンポーネントです");
 }
 },
};
</スクリプト>

5. 子コンポーネントは親コンポーネントのデータとメソッドを使用する

子コンポーネントでは、 $parentを使用して親コンポーネントのデータとメソッドにアクセスできます。 複数のネストがある場合は、 $parentの複数のレイヤーを使用することもできます。

親コンポーネント

<テンプレート>
 <div>
 <HelloWorld:title="メッセージ" ref="こんにちは" />
 </div>
</テンプレート>

<スクリプト>
「../components/HelloWorld.vue」からHelloWorldをインポートします。

エクスポートデフォルト{
 名前: "ホーム",
 データ() {
 戻る {
  メッセージ: 「音楽を検索」、
 };
 },

 メソッド: {
 親イベント() {
  console.log("私は親コンポーネントのメソッドです");
 },
 },
 コンポーネント:
 こんにちは世界
 },
};
</スクリプト>

サブコンポーネント

<テンプレート>
 <div class="hello">
 <h1 @click="add">{{ タイトル }}</h1>
 </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 名前: "HelloWorld",
 プロパティ: ["タイトル"],
 データ() {
 戻る {
  年齢:18
 };
 },
 メソッド: {
 追加(){
  console.log(this.$parent.msg)
  this.$parent.parentEvent();
 }
 },
};
</スクリプト>

6. Vuex 値転送

VuexVue.jsアプリケーション専用に開発された状態管理パターンです。集中型ストレージを使用してアプリケーションのすべてのコンポーネントのステータスを管理し、対応するルールを使用して、ステータスが予測可能な方法で変更されるようにします。一般的に、小規模なプロジェクトでは必要ありません。

6.1、ストアを定義する

「vue」からVueをインポートします。
「vuex」からVuexをインポートします。

Vue.js で Vuex をビルドします。

デフォルトの新しいVuex.Storeをエクスポートします({
 州: {
 学校:「清華大学」、
 a:「いいですね」
 },
 ゲッター: {
 returnVal(状態) {
  state.school + state.a を返します。
 },
 },
 突然変異:
 学校の状態を変更します(値) {
  状態.学校 = val;
  console.log('変更が成功しました');
 },
 },
 アクション: {},
 モジュール: {}
});

6.2、マウント

'vue' から Vue をインポートします。
'./App.vue' からアプリをインポートします。
「./router」からルーターをインポートします。
「./store」からストアをインポートします。
「element-ui」からElementUIをインポートします。
「element-ui/lib/theme-chalk/index.css」をインポートします。
「./publicFn/publicFn」からpublicFnをインポートします。

Vue.config.productionTip = false


定数 url = process.env.VUE_APP_URL;
Vue.prototype.$url = url;
Vue.prototype.$publicFn = publicFn;

Vue.js の ElementUI 要素をオーバーライドします。

新しいVue({
 ルーター、
 店、
 レンダリング: h => h(App),
}).$mount('#app')

6.3、使用

<テンプレート>
 <div class="hello">
 <h1 @click="add">{{ タイトル }}</h1>
 </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 名前: "HelloWorld",
 プロパティ: ["タイトル"],
 データ() {
 戻る {
  年齢:18
 };
 },
 メソッド: {
 追加(){
  console.log(this.$store.state.school);//値を取得//this.$store.commit('changeSchool', 'Peking University');//値を変更// console.log(this.$store.getters.returnVal)//フィルタリングされた値を取得}
 },
};
</スクリプト>

7. ルーティング値

7.1 クエリを通じて値を渡す

注: この方法では、ページの更新パラメータは失われず、アドレスバーの後にパラメータが表示さhttp://localhost:9000/#/conter?id=10086&name=%E9%B9%8F%E5%A4%9A%E5%A4%9A

ページA

<テンプレート>
 <div>
 <HelloWorld:title="メッセージ" ref="こんにちは" />
 <button @click="parentEvent">ジャンプ</button>
 </div>
</テンプレート>

<スクリプト>
「../components/HelloWorld.vue」からHelloWorldをインポートします。

エクスポートデフォルト{
 名前: "ホーム",
 データ() {
 戻る {
  メッセージ: 「音楽を検索」、
 };
 },

 メソッド: {
 親イベント() {
  this.$router.push({
  パス:"/conter",
  名前:'conter',
  クエリ:{
   id:10086,
   名前:「彭多多」
  }
  })
 },
 },
 コンポーネント:
 こんにちは世界
 },
};
</スクリプト>

ページB

<テンプレート>
 <div id='conter'>

 </div>
</テンプレート>

<スクリプト>

エクスポートデフォルト{
 名前:'conter',
 データ (){
 戻る {

 }
 },
 作成された(){
 console.log(this.$route.query.id、this.$route.query.name);
 },
}
</スクリプト>

7.2 パラメータ経由で値を渡す

注意: この方法でページを更新すると、パラメータは失われますが、 sessionStorageで受信して保存することができます。

Aページ

<テンプレート>
 <div>
 <HelloWorld:title="メッセージ" ref="こんにちは" />
 <button @click="parentEvent">ジャンプ</button>
 </div>
</テンプレート>

<スクリプト>
「../components/HelloWorld.vue」からHelloWorldをインポートします。

エクスポートデフォルト{
 名前: "ホーム",
 データ() {
 戻る {
  メッセージ: 「音楽を検索」、
 };
 },

 メソッド: {
 親イベント() {
  this.$router.push({
  パス:"/conter",
  名前:"カウンター",
  パラメータ:{
   id:10086,
   名前:「彭多多」
  }
  })
 },
 },
 コンポーネント:
 こんにちは世界
 },
};
</スクリプト>

ページB

<テンプレート>
 <div id='conter'>

 </div>
</テンプレート>

<スクリプト>

エクスポートデフォルト{
 名前:'conter',
 データ (){
 戻る {

 }
 },
 作成された(){
 console.log(this.$route.params.id、this.$route.params.name);
 },
}
</スクリプト>

これで、Vue の 7 つの値転送メソッドに関するこの記事は終了です。Vue の値転送メソッドの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue3 の父子値転送に関する簡単な説明
  • Vue の親子コンポーネントの値転送と一方向データフローの問題の詳細な説明
  • Vue 親子コンポーネントの相互値の転送と呼び出し
  • Vue の親子コンポーネントの値転送の落とし穴
  • vueの子コンポーネントと親コンポーネント間で値を渡す例
  • Vue 父子価値移転、兄弟価値移転、子父価値移転の詳細な説明

<<:  MySQL ステートメントを使用して、さまざまな整数が占めるバイト数とその最大値と最小値を調べる例

>>:  SSHのssh-keygenコマンドの基本的な使い方の詳細な説明

推薦する

Nginx/Httpd ロードバランシング Tomcat 設定チュートリアル

前回のブログでは、Nginx と httpd を使用して、逆生成用のバックエンド Tomcat サー...

mysql5.7.21 の異常起動を修正する方法

同僚から、停電のため MySQL インスタンスを起動できないという報告がありました。 innodb_...

Dockerfile を使用して nginx イメージを構築する例

Dockerfile の紹介Docker は、Dockerfile の内容を読み取ってイメージを自動...

MySQL 外部キー制約とテーブル関係の概要

目次外部キーテーブルの関係を決定する方法テーブル関係を作成する方法1対多の関係 - 従業員テーブルと...

Docker で nginx の https を設定する方法

https をサポートしていない Web サイトは、ブラウザによって徐々に安全でないとマークされるた...

MySQLでSQL文がどのように実行されるかの詳細な説明

概要最近MySQL関連の知識を勉強し始めました。学んだ知識ポイントと自分の理解を元に整理して共有しま...

nginxリバースプロキシのyum設定の詳細な手順

パート0 背景社内のイントラネットサーバーは直接インターネットにアクセスすることはできませんが、外部...

W3C チュートリアル (7): W3C XSL アクティビティ

スタイル シートは、ドキュメントの表示方法、発音方法、または入力方法を記述します。XSL 言語は、X...

Linuxカーネルがプロセスアドレス空間に侵入し、プロセスメモリを変更する方法

プロセス アドレス空間の分離は、現代のオペレーティング システムの注目すべき機能です。これは、「古い...

Nginx+FastDFSでイメージサーバーを構築

設置環境セントス環境依存性: yum -y gccをインストールします yum インストール -y ...

Vueは画像のドラッグアンドドロップ機能を実装します

この記事の例では、画像のドラッグアンドドロップ機能を実現するためのVueの具体的なコードを参考までに...

Vueカスタムv-has命令、ボタン権限判定の手順

目次アプリケーションシナリオ簡単に言えば、カスタム指示基本概念グローバルカスタマイズローカルカスタマ...

CSSは親要素の下の最初の子要素を選択します(:first-child)

序文最近、プロジェクトで :first-child を使用したのですが、すぐに思いつきました。これは...

html-cssタグのスタイル設定が機能しない2つの理由

1 セミコロン「;」のない CSS スタイル2 タグが閉じられておらず、「>」がありません...