Vue父子組件之間的通信

在Vue中,父子組件的關系可以總結為,父組件通過prop向下傳遞,給子組件發(fā)數據,子組件通過事件給父組件發(fā)送消息。

使用 Prop 傳遞數據

組件實例的作用域是孤立的。這意味著不能 (也不應該) 在子組件的模板內直接引用父組件的數據。父組件的數據需要通過?prop?才能下發(fā)到子組件中。

eg://父組件

newVue({

el:'#prop-example-2',?

data: {????????????

????????parentMsg:'Message from parent'?

????}

});

子組件中:<div>{{parentMsg}}<div/>

newVue({

el:'#prop-example-2',

? data: { },

????props:['我是子組件']

});

單向數據流:Prop 是單向綁定的:當父組件的屬性變化時,將傳導給子組件,但是反過來不會。這是為了防止子組件無意間修改了父組件的狀態(tài),來避免應用的數據流變得難以理解。另外,每次父組件更新時,子組件的所有 prop 都會更新為最新值。這意味著你不應該在子組件內部改變 prop。如果你這么做了,Vue 會在控制臺給出警告。

在兩種情況下,我們很容易忍不住想去修改 prop 中數據:

Prop 作為初始值傳入后,子組件想把它當作局部數據來用;

Prop 作為原始數據傳入,由子組件處理成其它數據輸出。

對這兩種情況,正確的應對方式是:

定義一個局部變量,并用 prop 的值初始化它:

props: ['initialCounter'],

data:function(){

????????return{counter:this.initialCounter }

}

定義一個計算屬性,處理 prop 的值并返回:

props: ['size'],

computed: {

????????normalizedSize:function(){

????????????returnthis.size.trim().toLowerCase()

????? }

};

注意在 JavaScript 中對象和數組是引用類型,指向同一個內存空間,如果 prop 是一個對象或數組,在子組件內部改變它會影響父組件的狀態(tài)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容