Vue父子組件之間的通信

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

使用 Prop 傳遞數(shù)據(jù)

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

eg://父組件

newVue({

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

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

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

????}

});

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

newVue({

el:'#prop-example-2',

? data: { },

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

});

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

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

Prop 作為初始值傳入后,子組件想把它當(dāng)作局部數(shù)據(jù)來用;

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

對這兩種情況,正確的應(yīng)對方式是:

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

props: ['initialCounter'],

data:function(){

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

}

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

props: ['size'],

computed: {

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

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

????? }

};

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

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容