您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Vue組件中data選項必須是函數的原因是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
官方解釋
data 必須是函數
構造 Vue 實例時傳入的各種選項大多數都可以在組件里使用。只有一個例外:data 必須是函數。實際上,如果你這么做:
Vue.component('my-component', { template: '<span>{{ message }}</span>', data: { message: 'hello' } })
那么 Vue 會停止運行,并在控制臺發出警告,告訴你在組件實例中 data 必須是一個函數。但理解這種規則為何存在也是很有益處的,所以讓我們先作個弊:
<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 的確是一個函數了,因此 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中使用數據的時候,我們是調用的component的私有變量data //如果我們不以函數的形式處理又會如何呢? var component=function(){ //不存在私有的data屬性 } component.propotype.data= {count:0} //此時,data不作為私有變量,就會有暴露的風險,而且,它指向的是{count:0}的引用,所以當重復創建組件的時候,component的data都指向了同一個引用。因此會相互影響。
如果不以原型鏈的形式處理,也可以不傳入函數
function component(d) { this.data = d; } var com = new component({ count: 1 }); var com1 = new component({ count: 1 });
關于Vue組件中data選項必須是函數的原因是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。