詳解Vue的組件中data選項為什么必須是函數(shù)
官方解釋
data 必須是函數(shù)
構造 Vue 實例時傳入的各種選項大多數(shù)都可以在組件里使用。只有一個例外:data 必須是函數(shù)。實際上,如果你這么做:
Vue.component('my-component', {
template: '<span>{{ message }}</span>',
data: {
message: 'hello'
}
})
那么 Vue 會停止運行,并在控制臺發(fā)出警告,告訴你在組件實例中 data 必須是一個函數(shù)。但理解這種規(guī)則為何存在也是很有益處的,所以讓我們先作個弊:
<div id="example-2">
<simple-counter></simple-counter>
<simple-counter></simple-counter>
<simple-counter></simple-counter>
</div>
var data = { counter: 0 }
Vue.component('simple-counter', {
template: '<button v-on:click="counter += 1">{{ counter }}</button>',
```
// 技術上 data 的確是一個函數(shù)了,因此 Vue 不會警告,
// 但是我們卻給每個組件實例返回了同一個對象的引用
```
data: function () {
return data
}
})
new Vue({
el: '#example-2'
})
=============以下為個人理解,如果有誤,請指出,謝謝指教
Vue.component('xxx',{
template:'{{counter}}',
data:function(){
return counter=0;
}
})
Vue在注冊到全局/局部并生成實例時,它是具有自己的作用域的,也就是說
在template 字符串模板中如果存在一個變量名與VUE實例的變量名一致的時候,這個變量只會是組件中的變量,而不會是VUE的全局變量
比如
//以下代碼中,組件中的count和Vue中的count是一樣的變量名,但是在組件中只會顯示0而不是2
Vue.component('simple-counter',{
template:'<button>{{count}}</button>',
data:function(){
return count=0;
}
});
vm=new Vue({
el:'#example-2',
data:{
count:2
}
})
以上代碼從原型鏈上理解
var component=function(){}//為了讓組件有自己的作用域,它必須包含私有變量data,所以簡單化的理解應該是這樣的
var component=function(){
this.data=this.data();//存在私有的data屬性
}
component.propotype.data=function(){
return {count:0}
}
//當我們在template中使用數(shù)據(jù)的時候,我們是調(diào)用的component的私有變量data
//如果我們不以函數(shù)的形式處理又會如何呢?
var component=function(){
//不存在私有的data屬性
}
component.propotype.data= {count:0}
//此時,data不作為私有變量,就會有暴露的風險,而且,它指向的是{count:0}的引用,所以當重復創(chuàng)建組件的時候,component的data都指向了同一個引用。因此會相互影響。
如果不以原型鏈的形式處理,也可以不傳入函數(shù)
function component(d) {
this.data = d;
}
var com = new component({
count: 1
});
var com1 = new component({
count: 1
});
總結
到此這篇關于詳解Vue的組件中data選項為什么必須是函數(shù)的文章就介紹到這了,更多相關Vue組件中data選項是函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
ElementUI動態(tài)渲染el-table的實現(xiàn)過程
在前端開發(fā)中,表格是不可或缺的一部分,無論是數(shù)據(jù)展示、數(shù)據(jù)錄入,還是數(shù)據(jù)分析,表格都扮演著重要的角色,而在Vue.js生態(tài)系統(tǒng)中,ElementUI提供了一個強大且靈活的表格組件——el-table,本文將帶你深入了解如何使用ElementUI動態(tài)渲染el-table,并詳細探討其原理及實現(xiàn)過程2024-08-08
Vue組件傳值方式(props屬性,父到子,子到父,兄弟傳值)
這篇文章主要介紹了Vue組件傳值方式(props屬性,父到子,子到父,兄弟傳值),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
element?el-tooltip實現(xiàn)自定義修改樣式
本文主要介紹了element?el-tooltip實現(xiàn)自定義修改樣式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07
Vue中實現(xiàn)v-for循環(huán)遍歷圖片的方法
這篇文章主要介紹了Vue中實現(xiàn)v-for循環(huán)遍歷圖片的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
vuex + keep-alive實現(xiàn)tab標簽頁面緩存功能
這篇文章主要介紹了vuex + keep-alive實現(xiàn)tab標簽頁面緩存功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10

