如何理解Vue應用是 prop 向下傳遞 事件向上傳遞的
官方文檔如是說,也有官方代碼實例如下:
反例1
Vue.component('TodoItem', {
props: {
todo: {
type: Object,
required: true
}
},
template: '<input v-model="todo.text">'
})
反例2
Vue.component('TodoItem', {
props: {
todo: {
type: Object,
required: true
}
},
methods: {
removeTodo () {
var vm = this
vm.$parent.todos = vm.$parent.todos.filter(function (todo) {
return todo.id !== vm.todo.id
})
}
},
template: `
<span>
{{ todo.text }}
<button @click="removeTodo">
X
</button>
</span>
`
})
正例1
Vue.component('TodoItem', {
props: {
todo: {
type: Object,
required: true
}
},
template: `
<input
:value="todo.text"
@input="$emit('input', $event.target.value)"
>
`
})
正例2
Vue.component('TodoItem', {
props: {
todo: {
type: Object,
required: true
}
},
template: `
<span>
{{ todo.text }}
<button @click="$emit('delete')">
X
</button>
</span>
`
})
網(wǎng)上還是挺多這種例子,但大多數(shù)是代碼,不是太理解..因此在這里向大家求教.
其實題主并沒有說清楚你的問題……不過我想我大概能猜到,所以答一下吧。
其實這是面向對象(Vue 的組件化也類似)中很常見的一個問題:實例之間如何傳遞狀態(tài)。即 A 中如果要用 B,怎么來回傳遞一些值。A 里面直接寫 B.foo = 'bar' 倒也容易,那么 B 如何傳回去呢?
真正的難點在于如何保證每個類可被復用。比如上面反例2。它直接修改父組件的屬性,那么就要求:
僅僅一個 todo-list 的小應用看起來還好,但是在大產(chǎn)品中,如果每個類都跟其它類有如此緊密的耦合,那簡直就無法維護和測試。所以現(xiàn)在大家普遍采用的辦法就是:
反例1中,Vue 采用隱式數(shù)據(jù)雙向綁定,即使用 getter/setter 替換直接的賦值操作。所以 v-model 做法會直接修改父組件的變量,也會很大程度上導致組件間強耦合,所以也建議盡量避免。
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。