以下に各コンポーネント通信方式の記述方法を一つずつ列挙する。 1. 小道具親コンポーネントが子コンポーネントにデータを送信します。これは最も一般的に使用される方法です。子コンポーネントがデータを受信した後、親コンポーネントのデータを直接変更することはできません。エラーが報告されるため、親コンポーネントが再レンダリングされると、データが上書きされます。サブコンポーネントを変更する場合は、 // Parent.vue は <template> を転送します <child :msg="メッセージ"></child> </テンプレート> // Child.vue はエクスポート デフォルトを受け取ります { //書き方1: 配列を使用して props:['msg'] を受け取る // 書き方2: オブジェクトを使用して受信すると、受信するデータ型を制限したり、デフォルト値を設定したり、検証したりすることができます。 props:{ メッセージ:{ タイプ:文字列、 デフォルト: 'これはデフォルトのデータです' } }, マウントされた(){ コンソールログ(このメッセージ) }, } 2. .sync親コンポーネントから子コンポーネントに渡されるデータの双方向バインディングを実現できるため、子コンポーネントはデータを受け取った後すぐにデータを変更でき、同時に親コンポーネントのデータも変更できます。 // 親.vue <テンプレート> <child :page.sync="ページ"></child> </テンプレート> <スクリプト> エクスポートデフォルト{ データ(){ 戻る { ページ:1 } } } // 子.vue エクスポートデフォルト{ プロパティ:["ページ"], 計算された(){ // 子コンポーネントの currentPage を変更すると、親コンポーネントのページも変更されます currentPage { 得る(){ このページを返す }, set(newVal){ this.$emit("update:page", newVal) } } } } </スクリプト> 3. Vモデル
// 親.vue <テンプレート> <子 v-model="値"></子> </テンプレート> <スクリプト> エクスポートデフォルト{ データ(){ 戻る { 値:1 } } } // 子.vue <テンプレート> <input :value="値" @input="ハンドラ変更"> </テンプレート> エクスポートデフォルト{ プロパティ:["値"], // イベント名を変更できます。デフォルトは入力です モデル:{ イベント:"updateValue" }, 方法:{ ハンドラの変更(e){ this.$emit("入力", e.target.value) を実行します。 // 上に名前変更がある場合は、次のようになります。$emit("updateValue", e.target.value) } } } </スクリプト> 4. 参照ref が通常の // 子.vue エクスポートデフォルト{ データ(){ 戻る { 名前:「ムーファ」 } }, 方法:{ いくつかのメソッド(メッセージ){ コンソール.log(メッセージ) } } } // 親.vue <テンプレート> <child ref="child"></child> </テンプレート> <スクリプト> エクスポートデフォルト{ マウントされた(){ const 子 = this.$refs.child console.log(child.name) // Muhuachild.someMethod("子コンポーネントのメソッドが呼び出されました") } } </スクリプト> 5. $emit / v-on子コンポーネントはイベントをディスパッチして親コンポーネントにデータを送信したり、親コンポーネントの更新やその他の操作をトリガーしたりします。 // Child.vue ディスパッチエクスポートデフォルト { データ(){ return { msg: "これは親コンポーネントに送信されたメッセージです" } }, メソッド: { ハンドルクリック(){ this.$emit("sendMsg",this.msg) } }, } // Parent.vue は <template> に応答します <child v-on:sendMsg="getChildMsg"></child> // または省略形 <child @sendMsg="getChildMsg"></child> </テンプレート> エクスポートデフォルト{ 方法:{ getChildMsg(メッセージ){ console.log(msg) // これは親コンポーネントが受信したメッセージです} } } 6. $attrs / $listenersネストされたコンポーネントの複数の層がデータを渡す場合、親コンポーネントが孫コンポーネントにデータを渡すときなど、中間処理を実行せずにデータのみを渡す場合に使用できます。 $listeners: 使い方は同じです // 親.vue <テンプレート> <child :name="名前" title="1111" ></child> </テンプレート エクスポートデフォルト{ データ(){ 戻る { 名前:「ムーファ」 } } } // 子.vue <テンプレート> // 孫コンポーネントに渡し続ける <sun-child v-bind="$attrs"></sun-child> </テンプレート> エクスポートデフォルト{ props:["name"], // これは受信することも受信しないこともできます。mounted(){ // props が name を受け取った場合は { title:1111 } になり、それ以外の場合は { name:"Muhua", title:1111 } になります。 console.log(this.$attrs) } } 7. $children / $parent $children:すべての子コンポーネント (孫コンポーネントを除く) を含む // 親.vue エクスポートデフォルト{ マウントされた(){ this.$children[0].someMethod() // 最初の子コンポーネントのメソッドを呼び出す this.$children[0].name // 最初の子コンポーネントのプロパティを取得する } } // 子.vue エクスポートデフォルト{ マウントされた(){ this.$parent.someMethod() //親コンポーネントのメソッドを呼び出す this.$parent.name //親コンポーネントのプロパティを取得する} } 8. 提供する/注入する
提供:子孫コンポーネントに提供したいデータやメソッドを指定できます // 親コンポーネント export default{ // メソッド 1 はメソッド provide:{ 内のメソッドを取得できません。 名前:"Muhua", age: this.dataのプロパティ}, // 方法 2 ではデータ内の属性を取得できません provide(){ 戻る { 名前:"Muhua", someMethod:this.someMethod // メソッド内のメソッド } }, 方法:{ いくつかのメソッド(){ console.log("これは注入方法です") } } } // 子孫コンポーネントエクスポートデフォルト{ 挿入:["名前","何らかのメソッド"], マウントされた(){ console.log(この名前) this.someMethod() } } 9. イベントバス
/方法1: // これを別の js ファイル Bus.js に抽出し、必要な場所にインポートします // Bus.js 「vue」からVueをインポートします デフォルトの新しい Vue() をエクスポートします 方法2: グローバルに直接マウントする // メイン.js 「vue」からVueをインポートします Vue.prototype.$bus = 新しいVue() 方法3: Vueルートオブジェクトに注入する // メイン.js 「vue」からVueをインポートします 新しいVue({ el:"#アプリ", データ:{ バス: 新しい Vue() } }) 使用法は以下のとおりです。オンデマンド導入の例として方法1を挙げます。 // カスタムイベントを外部に送信する必要があるコンポーネント内 <template> <button @click="handlerClick">ボタン</button> </テンプレート> 「./Bus.js」からBusをインポートします。 エクスポートデフォルト{ 方法:{ ハンドラクリック(){ // カスタムイベント名 sendMsg Bus.$emit("sendMsg", "これは外部に送信されるデータです") } } } // 外部イベントを受信する必要があるコンポーネントで「./Bus.js」からBusをインポートします エクスポートデフォルト{ マウントされた(){ // イベントトリガーをリッスンする Bus.$on("sendMsg", data => { console.log("これは受信したデータです:", data) }) }, beforeDestroy(){ //監視をキャンセル Bus.$off("sendMsg") } } 10. ヴュークス
たとえば、次のようなファイル構造を作成します。 index.js の内容は次のとおりです。 'vue' から Vue をインポートします 'vuex' から Vuex をインポートします './getters' からゲッターをインポートします './actions' からアクションをインポートします './mutations' から変異をインポートします './state' から状態をインポートします './modules/user' からユーザーをインポートします Vue.use(Vuex) 定数ストア = 新しい Vuex.Store({ モジュール: ユーザー }, ゲッター、 行動、 突然変異、 州 }) デフォルトストアをエクスポート 次に、main.js にインポートします。 「vue」からVueをインポートします 「./store」からストアをインポートします。 新しいVue({ el:"#アプリ", 店、 レンダリング: h => h(App) }) 次に、必要なコンポーネントで次の操作を実行します。 「vuex」から { mapGetters, mapMutations } をインポートします。 エクスポートデフォルト{ 計算:{ // 方法 1 次にこれを使用します。プロパティ名...mapGetters(["getters.js プロパティ 1 を導入する", "プロパティ 2"]) // メソッド 2...mapGetters("user", ["ユーザー モジュールの属性 1", "属性 2"]) }, 方法:{ // 方法 1 次にこれを使用します。プロパティ名...mapMutations(["mutations.js からの方法 1","方法 2"]) // メソッド 2...mapMutations("user",["ユーザー モジュールからのメソッド 1","メソッド 2"]) } } // または、次のように this.$store.state.xxx を取得することもできます this.$store.state.user.xxx 11. $ルート
12. スロット子コンポーネントのデータをスロットを介して親コンポーネントに渡し、それを元に戻す // 子.vue <テンプレート> <div> <スロット:user="ユーザー"></スロット> </div> </テンプレート> エクスポートデフォルト{ データ(){ 戻る { ユーザー:{ 名前:"Muhua" } } } } // 親.vue <テンプレート> <div> <子 v-slot="スロットプロパティ"> {{ slotProps.user.name }} </子> </div> </テンプレート> 以上で、Vue2.x の 12 種類のコンポーネント通信についての説明は終了です。Vue2.x のコンポーネント通信に関するより詳しい内容については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Intelli Idea で Tomcat 設定が見つからない問題の解決方法
SQL 左結合、右結合、内部結合、自然結合 さまざまな結合の概要SQL には、左結合、右結合、内部結...
Dockerデスクトップをインストールするダウンロード先: Docker Desktop for M...
概要: MySQL は、トランザクションをサポートするためにさまざまなストレージ エンジンを提供しま...
Vueでは、ローカルコンポーネントを自分で定義(登録)することができます。コンポーネント名を定義する...
これは私の最初のブログ投稿です。時間の制約があるため、どのようにフォーマットすればよいかわかりません...
目次HTML ページの作成js部分の機能を実装する1. 左ボタンと右ボタン2. 小さな円を動的に生成...
<br />2006年10月12日のNetEaseの新ホームページの公開から、2008年...
良いアイデアを見つけたので記録しました。私は以前、スクロール効果を実現するためにjQueryを使用し...
この記事では、MySQL クラスター化インデックスのページ分割を例を使って説明します。ご参考までに、...
<br />思想が東西に分かれていた時代、東洋の叡智を代表するものの一つとして「禅」は多...
MySQL には、msi インストールと zip 解凍の 2 つのインストール方法があります。 zi...
目次アポロ コンフィギュレーション センターとは何ですか?アポロの特徴クライアントアーキテクチャアー...
数学、物理学、および一部の科学技術分野で使用される特殊記号は多数あります。Unicode コードには...
目次1. Nginx の紹介1. Nginx とは何ですか? 2. Nginx を使用する理由3. ...
vertical-align属性は、主にインライン要素の配置を変更するために使用されます。インライン...