Vue では、コンポーネント間のメッセージ パッシングが非常に重要です。コンポーネント間のメッセージ パッシングの一般的な方法を以下にまとめます。 1. Props 親コンポーネント ---> 子コンポーネント通信親コンポーネント---子コンポーネントへのプロパティの転送 サブコンポーネント---propsモードでデータを受信する <息子:datas="fData"></息子> <スクリプト> '@/components/son' から Son をインポートします。 エクスポートデフォルト{ 名前:「父」 コンポーネント:{Son}, データ(){ 戻る { fData:'親コンポーネントから子コンポーネントに渡される値 - props メソッド' } } } </スクリプト> 子コンポーネントのプロパティで受け入れられるパラメータ名は、親コンポーネントが渡されるときに定義されたプロパティ名と一致している必要があります。 <テンプレート> <div>私は親コンポーネントのデータです: {{fData}}</div> <div @click=changeData>私は変更されたデータを渡す親コンポーネントです: {{mydata}}</div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前:「息子」 小道具:{ データ:{ タイプ:文字列、 デフォルト:'' } } データ(){ mydata:this.fatherData }, 方法:{ データの変更(){ this.mydata += 'データの変更' } }, } </スクリプト> 知らせ:
小道具:{ データ:{ タイプ:[文字列,数値], デフォルト:'' } } 2. $emit 子コンポーネント ---> 親コンポーネント転送
サブコンポーネント <el-button @click="handleEmit">親コンポーネントを変更する</el-button> <スクリプト> エクスポートデフォルト{ 名前:「息子」 方法:{ ハンドルエミット(){ this.$emit('triggerEmit','サブコンポーネントデータ') } } } </スクリプト> 親コンポーネント (子コンポーネントによって送信されるイベント名は、親コンポーネントによって受け入れられるイベント名と一致している必要があります) <Son @triggerEmit="changeData"></Son> <スクリプト> '@/components/son' から Son をインポートします。 エクスポートデフォルト{ 名前:「父」 コンポーネント:{Son}, 方法:{ changeData(名前){ console.log(name) // => 子コンポーネントからのデータです} } } </スクリプト> $emitとpropsを兄弟コンポーネントと組み合わせて値を渡す
親コンポーネント <childA :myName="名前"></ChildA> <ChildB :myName="名前" @changeName="名前を編集"></ChildB> エクスポートデフォルト{ データ() { 戻る { 名前: 'Hello Data' } }, メソッド: { 編集名前(名前){ this.name = 名前 } } } サブコンポーネントBはデータを変更して受信する <p>名前: {{ myName }}</p> <button @click="changeName">名前を変更</button> <スクリプト> エクスポートデフォルト{ 小道具: { myName:文字列 }, メソッド: { 名前を変更する() { this.$emit('changeName', '新しいデータ名') } } } </スクリプト> サブコンポーネントAはデータを受信 <p>名前: {{ newName }}</p> <スクリプト> エクスポートデフォルト{ 小道具: { myName:文字列 } } </スクリプト> 3. バス(イベントバス)ブラザーコンポーネント通信親子コンポーネント以外のコンポーネント間、またはそれ以上のレベルのコンポーネント間で値を転送します。Vue では、コンポーネント間の値の転送を管理するために、別のイベント センターが使用されます。
「vue」からVueをインポートします 定数バス = 新しい Vue() デフォルトバスをエクスポート データを変更する必要があるコンポーネント内の呼び出しを定義する <テンプレート> <div> <div>私はコミュニケーションコンポーネントAです</div> <button @click="changeName">名前を変更</button> </div> </テンプレート> <スクリプト> 「@/utils/Bus.js」からバスをインポートします。 エクスポートデフォルト{ コンポーネント: {}, データ() { 戻る {}; }, マウント() { コンソールログ(バス); }, メソッド: { 名前を変更する() { bus.$emit("editName", "dataset!"); }, }, }; </スクリプト> <style lang='scss' スコープ> </スタイル> bus.jsファイルも別のコンポーネントに導入されており、イベントコールバックは$onを通じて監視されます。 <テンプレート> <div> <span>名前: {{name}}</span> <div>私はコミュニケーションコンポーネントBです</div> </div> </テンプレート> <スクリプト> 「@/utils/Bus.js」からバスをインポートします。 エクスポートデフォルト{ コンポーネント: {}, データ() { {名前} を返します。 }, マウント() { bus.$on("editName", (name) => { this.name=名前 console.log(名前); // }); }, メソッド: {}, }; </スクリプト> <style lang='scss' スコープ> </スタイル> 4. $parent、$childrenはコンポーネントインスタンスに直接アクセスします
子コンポーネント --- this.$parent は親コンポーネントのメソッドやデータなどを取得でき、直接使用して実行することができます。 <テンプレート> <div>私は子コンポーネントです</div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前:"息子", データ(){ 戻る { sonTitle: '私は子コンポーネントのデータです' } }, 方法:{ 息子ハンドル(){ console.log('私はサブコンポーネントのメソッドです') } }, 作成された(){ console.log(this.$parent) console.log(this.$parent.fatherTitle) // => 親コンポーネントのデータです this.$parent.fantherHandle() // => 親コンポーネントのメソッドです } } </スクリプト> 親コンポーネント --- 子コンポーネントのインスタンスを取得します。取得したインスタンスは配列の形式です。This.$children[0] はコンポーネントインスタンスを取得し、コンポーネントメソッドとデータを呼び出すことができます。 <テンプレート> <div> <Son>私は親コンポーネントです</Son> </div> </テンプレート> <スクリプト> './son.vue' から Son をインポートします。 エクスポートデフォルト{ 名前: 「父」 コンポーネント:{ 息子 }, データ(){ 戻る { fatherTitle: 「私は親コンポーネントのデータです」 } }, 方法:{ ファンサーハンドル(){ console.log('私は親コンポーネントのメソッドです') } }, マウントされた(){ console.log(this.$children) console.log(this.$children[0].sonTitle) // => 子コンポーネントのデータです this.$children[0].sonHandle() // => 子コンポーネントのメソッドです } } </スクリプト> 5. $参照ref は、要素またはサブコンポーネントの参照情報を登録するために使用されます。参照情報は親コンポーネントの $refs オブジェクトに登録されます。 親コンポーネントは$refsを使用してコンポーネントインスタンスを取得します。 <テンプレート> <div> <息子ref="息子"></息子> </div> </テンプレート> <スクリプト> './son.vue' から Son をインポートします。 エクスポートデフォルト{ 名前: 「父」 コンポーネント:{ 息子 }, マウントされた(){ console.log(this.$refs.son) /*コンポーネントインスタンス*/ } } </スクリプト> 6. マルチコンポーネントまたはディープコンポーネント通信を提供する/注入する提供/注入の詳細な説明
/* 親コンポーネント */ エクスポートデフォルト{ 提供する: 戻る { provideName: 'フロントエンドの販売' } } } この時点で、変数provideNameは、曾孫、孫などを含むすべての子コンポーネントに提供され、injectを使用するだけでデータを取得できます。 /*サブコンポーネント*/ エクスポートデフォルト{ 挿入: ['provideName'], 作成された(){ console.log(this.provideName) // => "フロントエンドの販売" } }
7. スロット(スロットスコープスコープスロット)子要素 --> 親要素(通信と同様)
子要素 <テンプレート> <div> <div class="isSon"> <スロット:info='arrList'></スロット> </div> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ コンポーネント: {}, データ() { return {arrList:[1,'aa','张三']}; }, マウント() { }, メソッド: { }, }; </スクリプト> 親要素 <テンプレート> <div> <ソンG> <span スロットスコープ="props"> <ul> ああ <li v-for="props.info 内の項目" :key="項目"> {{アイテム}} </li> </ul> </span> </SonG> </div> </テンプレート> <スクリプト> '../components/SonG.vue' から SonG をインポートします。 エクスポートデフォルト{ コンポーネント:{ 歌 }, データ () { 戻る { } } } </スクリプト> 8. Vuex 状態管理パブリックデータウェアハウスと同等 倉庫データを管理するためのいくつかの方法を提供する 'vue' から Vue をインポートします 'vuex' から Vuex をインポートします Vue.use(Vuex) デフォルトの新しいVuex.Storeをエクスポートします({ 州: { }, 突然変異: }, アクション: { }, モジュール: } }) 要約するこれで、Vue でコンポーネント通信を実装する 8 つの方法についての記事は終了です。Vue でコンポーネント通信を実装することに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL で大文字と小文字を区別しないように設定する方法
>>: LINUX でプロセスを表示する 4 つの方法 (要約)
この物語は、今日の予期せぬ発見から始まります。同社には複数のウェブサイトがある。友達リンクにはお互い...
この記事では、例を使用して、MySQL の日付と時刻の間隔計算について説明します。ご参考までに、詳細...
Git 入門Git は、Linux(R) カーネル開発の管理を支援するために 2005 年に Lin...
1. ドロップダウンリストの例コードは次のとおりです。 <!doctypehtml> ...
実はこれもクリックベイトのタイトルであり、「派手」とは言えません。ただ私が無知で、こうしたラベルを見...
概要インデックスは、テーブル内の 1 つ以上の列に基づいて DBMS によって特定の順序で作成される...
Linux のファイル権限まず、現在のディレクトリ内のファイルの内容を確認しましょう。 ls -l ...
目次ストレージエンジンMySQL でサポートされているストレージ エンジン同時実行制御ロック粒子をロ...
今日は、ネイティブ JS で実装されたブリージング カルーセルを紹介します。効果は次のとおりです。 ...
1. Docker環境を構築する1. Dockerfileを作成する Centos:latest か...
最近、Apache を nginx に変更しました。TP プロジェクトを実行に移すと、404 エラー...
システム環境: centos7.4 1. データベースがインストールされているかどうかを確認します。...
主な違い: 1. タイプSQL データベースは主にリレーショナル データベース (RDBMS) とし...
聞く: CSS を使用してハイパーリンクのスタイルを設定しましたが、ホバーしても機能しません。なぜこ...
XHTML CSS ページ制作中に遭遇する問題の解決策は、解決策と呼ぶには少々大げさです。せいぜい、...