<div id="counter-event-example">
<p>{{ total }}</p>
<button-counter v-on:increment="incrementTotal"></button-counter>
<button-counter v-on:increment="incrementTotal"></button-counter>
</div>
Vue.component('button-counter', {
template: '<button v-on:click="incrementCounter">{{ counter }}</button>',
data: function () {
return {
counter: 0
}
},
methods: {
incrementCounter: function () {
this.counter += 1
this.$emit('increment')
}
},
})
new Vue({
el: '#counter-event-example',
data: {
total: 0
},
methods: {
incrementTotal: function () {
this.total += 1
}
}
})
?這上面的是vue官方文檔給出的父子通信組件的例子,是通過自定義事件實現(xiàn)的。
?我通過props 傳function方式實現(xiàn)相同的功能下面是代碼部分
<div id="counter-event-example">
<p>{{ total }}</p>
<button-counter :increment="incrementTotal"></button-counter>
<button-counter :increment="incrementTotal"></button-counter>
</div>
Vue.component('button-counter', {
template: '<button v-on:click="incrementCounter">{{ counter }}</button>',
props:{
increment:{
type:Function
required:true
}
}
data: function () {
return {
counter: 0
}
},
methods: {
incrementCounter: function () {
this.counter += 1
//this.$emit('increment')
this.increment();
}
},
})
new Vue({
el: '#counter-event-example',
data: {
total: 0
},
methods: {
incrementTotal: function () {
this.total += 1
}
}
})
利用props特性一樣可以實現(xiàn)vue父子組件的通信,在這里我想問問props實現(xiàn)和自定義事件實現(xiàn)都能實現(xiàn)那么在項目開發(fā)的時候該選擇哪種方式呢,它們各有什么特點(diǎn)呢?我自己知道的就是通過自定義事件實現(xiàn)的配合vue-devtool工具方便調(diào)試,還有其他的嗎?
組件設(shè)計初衷就是要配合使用的,最常見的就是形成父子組件的關(guān)系:組件 A 在它的模板中使用了組件 B。它們之間必然需要相互通信:父組件可能要給子組件下發(fā)數(shù)據(jù),子組件則可能要將它內(nèi)部發(fā)生的事情告知父組件。然而,通過一個良好定義的接口來盡可能將父子組件解耦也是很重要的。這保證了每個組件的代碼可以在相對隔離的環(huán)境中書寫和理解,從而提高了其可維護(hù)性和復(fù)用性。
在 Vue 中,父子組件的關(guān)系可以總結(jié)為 prop 向下傳遞,事件向上傳遞。父組件通過 prop 給子組件下發(fā)數(shù)據(jù),子組件通過事件給父組件發(fā)送消息??纯此鼈兪窃趺垂ぷ鞯?。
其實吧。在滿足業(yè)務(wù)需求的情況下,不存在那種方法好不好,昨天還跟同事討論架構(gòu)員和業(yè)務(wù)員有什么本質(zhì)的區(qū)別,有一點(diǎn)就是架構(gòu)的人對實際業(yè)務(wù)的考量程度不同,應(yīng)該說,架構(gòu)人員對業(yè)務(wù)邏輯的支持度沒那么嚴(yán)格,也就存在一個東西有多個方式可以解決,架構(gòu)人員考慮的是整個框架邏輯的風(fēng)格,規(guī)范和最大化的去支持各種實現(xiàn),就對于你這個問題,我又看了一遍文檔,作者提到了其中一個概念解耦,你說解耦有用嗎,對于你的業(yè)務(wù),一點(diǎn)用都沒有,你自己都沒想過如何控制耦合度吧,但是人家不能因為有了自定義事件,就禁止props傳入事件,沒有這個道理的, 如果你在架構(gòu)自定義事件的時候去考慮props里面有相關(guān)實現(xiàn)的話,這個框架就寫不完了,也寫不下去了,好的框架是包容性的,當(dāng)然自定義事件也有自定義事件的用途,官網(wǎng)上就有好幾個特殊的用途,所以不要拿你的業(yè)務(wù)去考量一整個框架的思考, 寫的比較繁瑣,歡迎討論
其實是個人習(xí)慣問題,都可以,我習(xí)慣用this.emit('parentFn', params)
,提醒我是調(diào)用的父級組件的一個方法,事實上是可以把父級的一個方法當(dāng)作props
函數(shù)類型變量傳遞給子組件的
props:{
propA:{
type: Function
}
}
官網(wǎng)有說明:https://cn.vuejs.org/v2/guide...
分享一個Vue.js 2 的全家桶系列教程:
1.vue.js 2 入門與提高 http://xc.hubwiz.com/course/5...
2.vuex 2 入門與提高 http://xc.hubwiz.com/course/5...
3.vue-router 2 入門與提高 http://xc.hubwiz.com/course/5...
4.vue.js 2 工程化實踐 http://xc.hubwiz.com/course/5...
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
浪潮集團(tuán)項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。