Vue 値転送の 12 の方法の概要

Vue 値転送の 12 の方法の概要

1. 父から息子へ

(1) 親コンポーネントの子コンポーネントタグにプロパティをバインドし、転送する変数をマウントします。 (2) 子コンポーネントで props を通じてデータを受け取ります。 props は配列またはオブジェクトです。受け取ったデータはそのまま使用できます。 props: ["プロパティ名"] props:{プロパティ名: データ型}
コード例:

//親コンポーネント <テンプレート>
  <div>
    <i>親コンポーネント</i>
    <!--ページの使用法-->
    <son :data='名前'></son> 
  </div>
</テンプレート>

<スクリプト>
import son from "./son.vue"; //親コンポーネントをインポート export default {
  components: { son }, //コンポーネントを登録します name: "親コンポーネント",
  データ() {
    戻る {
      name: "Frazier", //親コンポーネントは変数を定義します};
  },
};
</スクリプト>
//サブコンポーネント <テンプレート>
  <div>{{データ}}</div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
コンポーネント: { },
  名前: 'サブコンポーネント',
  プロパティ:["データ"],
};
</スクリプト>

2. 息子から父へ

(1)親コンポーネントの子コンポーネントタグのイベントをカスタマイズし、必要なメソッドを呼び出します。
(2)子コンポーネントメソッドでは、this.$emit("event")を使用して親コンポーネントで定義されたイベントをトリガーし、パラメータの形式でデータを渡します。
コード例:

//親コンポーネント <テンプレート>
  <div>
    <i>親コンポーネント</i>
    <!--ページの使用法-->
    <son @lcclick="lcclick"></son>//イベントをカスタマイズする</div>
</テンプレート>

<スクリプト>
import son from "./son.vue"; //親コンポーネントをインポート export default {
  components: { son }, //コンポーネントを登録します name: "親コンポーネント",
  データ() {
    戻る {};
  },
  メソッド: {
    lcclick(){
      アラート('息子が父親に引き継がれる')
    }
  },
};
</スクリプト>

//サブコンポーネント <テンプレート>
  <div>
    <button @click="lcalter">クリックしてください</button>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
コンポーネント: { },
  名前: 'サブコンポーネント',
  メソッド: {
    呼び出し(){
      this.$emit('lcclick')//emit を通じてイベントをトリガーします}
  },
};
</スクリプト>

3. ブラザーコンポーネント通信(バス)

(1)srcに新しいBus.jsファイルを作成し、空のvueインスタンスをエクスポートします。
(2)データ送信側にBus.jsを導入し、Bus.emit("イベント名", "パラメータ")を通じてイベントをディスパッチします。emit("イベント名", "パラメータ")によってデータがディスパッチされ、emit()のパラメータの形でデータが送信されます。
(3)データを受け取る側にBus.jsを導入し、Bus.$on("イベント名", (data) => {dataは受信したデータ}) を使用する

画像例:

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

4. ref/refs(親子コンポーネント通信)

(1) refが通常のDOM要素で使用される場合、参照はDOM要素を指します。子コンポーネントで使用される場合、参照はコンポーネントインスタンスを指します。
(2)インスタンスを通じてコン​​ポーネントメソッドを呼び出したり、データに直接アクセスしたりすることができます。これは、子コンポーネントから親コンポーネントへの一種の値の転送とみなすこともできます。
コード例:

//親コンポーネント <テンプレート>
  <div>
    <button @click="sayHello">こんにちはと言う</button>
    <child ref="childForRef"></child>
  </div>
</テンプレート>
<スクリプト>
'./child.vue' から子をインポートします。
  エクスポートデフォルト{
    コンポーネント: { 子 },
    データ () {
      戻る {
        子参照: null、
      }
    },
    マウント() {
      this.childForRef = this.$refs.childForRef;
      コンソールにログ出力します。
    },
    メソッド: {
      こんにちは(){
        this.childForRef.sayHello()
      }
    }
  }
</スクリプト>
//サブコンポーネント <テンプレート>
  <div>お子様向けコンテンツ</div>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
  データ () {
    戻る {
      名前:「私は子供です」
    }
  },
  メソッド: {
    こんにちは(){
      コンソールにログ出力します。
      アラート('hello');
    }
  }
}
</スクリプト>

5. Vuex通信

コンポーネントは、非同期操作であるアクションにディスパッチします。アクションは、論理操作を通じて状態を変更するミューテーションにコミットし、それによってコンポーネントと同期してデータ ステータスを更新します。
コード例:

//親コンポーネントテンプレート>
  <div id="アプリ">
    <子供A/>
    <子供B/>
  </div>
</テンプレート>
<スクリプト>
  import ChildA from './ChildA' // コンポーネントAをインポート import ChildB from './ChildB' // コンポーネントBをインポート export default {
    components: {ChildA, ChildB} // コンポーネントを登録する}
</スクリプト>
//サブコンポーネントA
<テンプレート>
 <div id="childA">
   <h1>私はコンポーネント A です</h1>
   <button @click="transform">クリックするとコンポーネント B がデータを受信できるようになります</button>
   <p>B がクリックされたため、メッセージが変更されました: {{BMessage}}</p>
 </div>
</テンプレート>
<スクリプト>
 エクスポートデフォルト{
   データ() {
     戻る {
       メッセージ: 「こんにちは、コンポーネント B、私はコンポーネント A です」
     }
   },
   計算: {
     Bメッセージ() {
       // ストアから取得したコンポーネント B のデータをここに保存します。 return this.$store.state.BMsg
     }
   },
   メソッド: {
     変身() {
       //receiveAMsgをトリガーし、コンポーネントAのデータをストアに保存します。this.$store.commit('receiveAMsg', {
         AMsg: this.AMessage
       })
     }
   }
 }
</スクリプト>
//サブコンポーネント B
<テンプレート>
 <div id="childB">
   <h1>私はコンポーネント B です</h1>
   <button @click="transform">クリックするとコンポーネント A がデータを受信できるようになります</button>
   <p>A をクリックすると、メッセージが変わります: {{AMessage}}</p>
 </div>
</テンプレート>

<スクリプト>
 エクスポートデフォルト{
   データ() {
     戻る {
       Bメッセージ: 「こんにちは、コンポーネントA、私はコンポーネントBです」
     }
   },
   計算: {
     メッセージ() {
       // ここでストアから取得したコンポーネント A のデータを保存します。 return this.$store.state.AMsg
     }
   },
   メソッド: {
     変身() {
       // 受信BMsgをトリガーし、コンポーネントBのデータをストアに保存します。this.$store.commit('receiveBMsg', {
         BMsg: this.BMessage
       })
     }
   }
 }
</スクリプト>

//ヴュークス
'vue' から Vue をインポートします
 'vuex' から Vuex をインポートします
 Vue.use(Vuex)
 定数状態 = {
   AMsg: ''、
   BMsg: ''
 }
 
 const 変異 = {
   受信AMsg(状態、ペイロード) {
     // コンポーネントAのデータを状態に保存する
     状態.AMsg = ペイロード.AMsg
   },
   受信BMsg(状態、ペイロード) {
     // コンポーネントBのデータを状態に保存する
     状態.BMsg = ペイロード.BMsg
   }
 }
 
 デフォルトの新しいVuex.Storeをエクスポートします({
   州、
   突然変異
 })

6. $親

Parent を使用すると、親コンポーネント インスタンスを取得できます。その後、このインスタンスを介して親コンポーネントのプロパティとメソッドにアクセスできます。また、親コンポーネント インスタンスを取得できる兄弟親もあり、その後、このインスタンスを介して親コンポーネントのプロパティとメソッドにアクセスできます。また、親コンポーネント インスタンスを取得できる兄弟親もあり、その後、このインスタンスを介して親コンポーネントのプロパティとメソッドにアクセスできます。また、ルート コンポーネント インスタンスを取得できる兄弟ルートもあります。
コード例:

// 親コンポーネントのデータを取得する this.$parent.foo

// 親コンポーネントにデータを書き込む this.$parent.foo = 2

// 親コンポーネントの計算プロパティにアクセスします this.$parent.bar

//親コンポーネントメソッド this.$parent.baz() を呼び出す

// 子コンポーネントを親コンポーネントに渡す例では、this.$parent.getNum(100) を使用して値を親コンポーネントに渡すことができます。

7.セッションストレージ値の転送

SessionStorage はブラウザのグローバル オブジェクトであり、ページが閉じられるとそこに保存されたデータはクリアされます。この機能を使用すると、すべてのページでデータのコピーを共有できます。
コード例:

// データをセッションストレージに保存する
sessionStorage.setItem('キー', '値');

// sessionStorage からデータを取得します。let data = sessionStorage.getItem('key');

// sessionStorage から保存されたデータを削除します sessionStorage.removeItem('key');

// sessionStorage から保存されたすべてのデータを削除します。sessionStorage.clear();

注: ここに保管されるのはキーと値のペアであり、文字列型のみになります。オブジェクトを保管する場合は、let objStr = JSON.stringify(obj) を使用して文字列に変換してから保管する必要があります (let obj = JSON.parse(objStr) を使用してオブジェクトに解析する場合)。
私は、sessionStorage をカプセル化し、その API を直接使用してオブジェクトを保存できるようにする good-storage というライブラリをお勧めします。

//ローカルストレージ
 ストレージ.set(キー,値) 
 ストレージ.get(キー、定義)
//セッションストレージ
 storage.session.set(キー、値)
 storage.session.get(キー、値)

8. ルーティング値

疑問符を使用して値を渡す
ページ A がページ B にジャンプする場合、 this. router .push ( ' / B ? name = danseek ' ) を使用します。ページ B は this. router.push('/B?name=danseek') を使用できます。ページ B は this.route.query.name を使用して、ページ A から渡された値を取得できます。上記の router と route の違いに注意してください。
コロンを使用して値を渡します<br /> 次のルートを構成します。

{
    パス: '/b/:name',
    名前: 'b',
    コンポーネント: () => import( '../views/B.vue')
 },

ページBでは、this.$route.params.nameを使用して、ルートによって渡された名前の値を取得できます。

親子コンポーネントを使用して値を渡す router-view自体もコンポーネントなので、親子コンポーネントを使用して値を渡し、対応する子ページにpropsを追加することもできます。タイプが更新されてもルートは更新されないため、子ページのマウントされたフックで最新のタイプ値を直接取得することはできませんが、watchが使用されます。

<ルータービュー:type="type"></ルータービュー>

// サブページのプロパティ: ['type']
時計:
       タイプ(){
           // console.log("この方法では、常に最新のデータを取得できます: type=", this.type)
       },
},

9. 祖先の孫 $attrs

通常の状況では、中間遷移として父の props を使用する必要がありますが、この方法では、父コンポーネントに親コンポーネントの業務に関係のない属性が多くなり、結合度が高くなります。$attrs の助けを借りて、簡素化することができ、祖父母も孫も変更する必要がありません。
祖先コンポーネント:

<テンプレート>
    <セクション>
        <parent name="grandParent" sex="男" age="88" hobby="code" @sayKnow="sayKnow"></parent>
    </セクション>
</テンプレート>

<スクリプト>
    './Parent' から Parent をインポートします
    エクスポートデフォルト{
        名前:「祖父母」
        コンポーネント:
          親
        },
        データ() {
            戻る {}
        },
        メソッド: {
          知っていると言う(val){
            コンソール.log(値)
          }
        },
        マウント() {
        }
    }
</スクリプト>

親コンポーネント

<テンプレート>
  <セクション>
    <p>親コンポーネントは</p>を受け取ります。
    <p>祖父の名前: {{name}}</p>
    <children v-bind="$attrs" v-on="$listeners"></children>
  </セクション>
</テンプレート>

<スクリプト>
  './Children' から Children をインポートします。

  エクスポートデフォルト{
    名前:「親」、
    コンポーネント:
      子供たち
    },
    // 親コンポーネントは名前を受け取るので、名前の値は子コンポーネントの props:['name'] には渡されません。
    データ() {
      戻る {}
    },
    メソッド: {},
    マウント() {
    }
  }
</スクリプト>

サブコンポーネント

<テンプレート>
  <セクション>
    <p>サブコンポーネントを受信しました</p>
    <p>祖父の名前: {{name}}</p>
    <p>祖父の性別: {{sex}}</p>
    <p>祖父の年齢: {{age}}</p>
    <p>祖父の趣味: {{hobby}}</p>

    <button @click="sayKnow">わかっています</button>
  </セクション>
</テンプレート>

<スクリプト>
  エクスポートデフォルト{
    名前:「子供」、
    コンポーネント: {},
    // 親コンポーネントは name 属性を受け取っているため、子コンポーネントには name は渡されません props:['sex','age','hobby','name'],
    データ() {
      戻る {}
    },
    メソッド: {
      知っている(){
        this.$emit('sayKnow','私は知っている')
      }
    },
    マウント() {
    }
  }
</スクリプト>

10. Sun Chuanzuは$listenersを使用する

9番目と同じ

祖先コンポーネント

<テンプレート>
  <div id="アプリ">
    <children-one @eventOne="eventOne"></children-one>
    {{メッセージ}}
  </div>
</テンプレート>
<スクリプト>
'../src/components/children.vue' から ChildrenOne をインポートします。
エクスポートデフォルト{
  名前: 'アプリ'、
  コンポーネント:
    チルドレンワン、
  },
  データ() {
    戻る {
      メッセージ: ''
    }
  },
  メソッド: {
    イベントOne(値) {
      this.msg = 値
    }
  }
}
</スクリプト>

親コンポーネント

<テンプレート>
  <div>
    <children-two v-on="$listeners"></children-two>
  </div>
</テンプレート>

<スクリプト>
'./childrenTwo.vue' から ChildrenTwo をインポートします。

エクスポートデフォルト{
  名前: 'childrenOne',
  コンポーネント:
    子供2人
  }
}
</スクリプト>

サブコンポーネント

<テンプレート>
  <div>
    <button @click="setMsg">クリックして祖父に渡す</button>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前: 「子供」
  メソッド: {
    setMsg() {
      this.$emit('eventOne', '123')
    }
  }
}
</スクリプト>

11. Promiseパラメータの受け渡し

プロミス解決で複数のパラメータを渡す方法

//この使用法と似ていますが、実際には最後の2つのパラメータは取得できません。promise = new Promise((resolve,reject)=>{
    a = 1とする
    b = 2とする
    c = 3とする
    解決(a,b,c) 
})
promise.then((a,b,c)=>{
    コンソールログ(a,b,c)
})

resolve() は 1 つのパラメータのみを受け入れて処理することができ、余分なパラメータは無視されます。
複数必要な場合は、配列またはオブジェクトを使用します。 。
配列

プロミス = 新しいプロミス((解決、拒否)=>{
    解決([1,2,3]) 
})
promise.then((arr)=>{
    コンソールログ(arr[0],arr[1],arr[2])
})

物体

プロミス = 新しいプロミス((解決、拒否)=>{
    解決({a:1,b:2,c:3}) 
})
promise.then(obj=>{
    コンソールログ(obj.a、obj.b、obj.c)
})

12. グローバル変数

グローバル変数を定義し、値を持つコンポーネントに直接値を代入し、必要なコンポーネントで直接使用します。詳細については私のブログを参照してください。
ブログリンクのグローバル変数をクリックするだけです

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

以下もご興味があるかもしれません:
  • Vue におけるいくつかの値転送方法 (3 種類)
  • Vueコンポーネントが相互に値を転送する方法の詳細な説明
  • Vueデータ割り当て問題の解決
  • Vue における値の受け渡しと割り当ての問題

<<:  Linux におけるシステム入出力管理の詳細な説明

>>:  RedHat 6.5/CentOS 6.5 に MySQL 5.7.20 をインストールするための詳細なチュートリアル

推薦する

html+cssレイアウトの3つの方法(ナチュラルレイアウト/フローレイアウト/ポジショニングレイアウト)

1. 自然なレイアウト<br />レイアウトは変更せずに自動的に左揃えになります。 2....

HTML ドキュメントに CSS を埋め込む一般的な 3 つの方法

HTMLでCSSを定義するには、埋め込み、リンク、インラインの3つの方法が一般的に使用されます。 1...

JavaScript 配列重複排除ソリューション

目次方法1: set: データ型ではなくデータ構造であり、メンバーは一意である方法2: オブジェクト...

Linux における「!」の知られざる使用法のまとめ

序文実際、Linux では、控えめな「!」が驚くほど多くの用途で使用されています。この記事では、「!...

Vueは複数のカウントダウンを同時に設定する機能を実装しています

この記事の例では、複数のカウントダウンを同時に設定するためのVueの具体的なコードを参考までに共有し...

モバイルデバイス上のぼやけた小さなアイコンの問題を解決する方法

序文以前、画像とテキストの垂直方向のずれの問題について説明しました。ここで示した小さな例では、小さな...

MySQL 最適化 query_cache_limit パラメータの説明

クエリキャッシュ制限query_cache_limit は、単一のクエリで使用できるバッファ サイズ...

Vue プロジェクトにインターフェース リスニング マスクを追加する方法

1. 事業背景マスク レイヤーを使用してユーザーの異常な操作を遮断する方法は、フロントエンドでよく使...

MySQL の遅いクエリを見つける方法

序文誰もが日常業務で SQL の最適化を経験したことがあると思います。したがって、最適化の前に、遅い...

MySQL におけるユニーク制約と NULL の詳細な説明

序文説明を簡略化するために以前に設定した要件は、他のグループから MQ メッセージを受信し、データベ...

フロア効果を実現するためのJavaScript

この記事では、フロア効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します。...

Vue プロジェクトで axios をカプセル化する方法 (http リクエストの統合管理)

1. 要件Vue.js フレームワークを使用してフロントエンド プロジェクトを開発する場合、サーバ...

Linux インストール MySQL5.6.24 使用手順

Linux インストール MySQL ノート1. MySQL データベース サーバーをインストールす...

MySQL データベースの最適化: インデックスの実装原則と使用状況の分析

この記事では、例を使用して、MySQL データベースの最適化のためのインデックス実装の原則と使用方法...

MySQLの共通関数を使用してJSONを処理する方法

公式ドキュメント: JSON 関数名前説明JSON_APPEND() JSONドキュメントにデータを...