最近在學習vue中在圖靈社群買了一本電子書《vue小書》,我感覺挺坑的,沒有期待的那麼好。
其中有的一下子就給一大串**,但這一大串**只是為了說明某一點,但是這片**很多處都可以講的,大概是因為篇幅限制原因吧。
首先官方解釋:
當乙個元件被定義, data 必須宣告為返回乙個初始資料物件的函式,因為元件可能被用來建立多個例項。如果 data 仍然是乙個純粹的物件,則所有的例項將共享引用同乙個資料物件!通過提供 data 函式,每次建立乙個新例項後,我們能夠呼叫 data 函式,從而返回初始資料的乙個全新副本資料物件。然後又舉了乙個例子:
假定存在元件componenta,裡面定義為
module.exports = ,
data:
}在某個page裡面我們定義了如下的模板
那麼上面兩個componenta的例項中的data將同時為元件定義時data對應的物件,即相當於兩個例項的data相互影響了。
也就是第乙個例項的data和第二個我們並不想改變的例項的data也會發生改變。
再舉個例子:
點選的次數}
點選的次數}
執行上面兩段**會發現不同結果。
這個問題模擬到引用資料型別。
如果不用function return 每個元件的data都是記憶體的同乙個位址,那乙個資料改變其他也改變了,這當然就不是我們想要的。
用function return 其實就相當於申明了新的變數,相互獨立,自然就不會有這樣的問題
這讓我之前看到的乙個js指標問題,js裡面有引用型別和基本型別,
//基本型別
var a = 1;
var b = a;
b = 2;
console.log(a) //1 值不隨b的改變而改變
//引用型別
var a = ;
var b = a;
b.x = 2
console.log(a.x) //2 值隨著b的改變而改變
具體原因,犀牛書裡面好像講過, 基本型別占用空間少,而引用型別占用大,js為了節約空間,就把引用型別的值用乙個叫做指標的東西和變數連線起來, 也就是說改乙個其他的都會跟著改變,公用的意思.
我們用js原型鏈在舉乙個例子:
var mycomponent = function() {}
mycomponent.prototype.data =
// 上面是乙個虛擬的元件構造器,真實的元件構造器方法很多
var component1 = new mycomponent()
var component2 = new mycomponent()
// 上面例項化出來兩個元件例項,也就是通過呼叫,建立的兩個例項
component1.data.a === component2.data.a // true
component1.data.b = 5
component2.data.b // 5
可以看到上面**中最後三句測試**,如果兩個例項同時引用乙個物件,那麼當你修改其中乙個屬性的時候,另外乙個例項也會跟著改。這怎麼可以,兩個例項應該有自己各自的域才對。所以,需要通過下面方法來進行處理:
var mycomponent = function()
mycomponent.prototype.data = function()
}
這個方法就是給例項新增乙個data屬性,它的值是原型方法data返回的乙個新物件,下次用例項訪問data的時候就會直接訪問到這個物件,因為有了例項屬性data了,就不會去查詢原型上的data。
vue.component('my-component', // 返回乙個唯一的物件,不要和其他元件共用乙個物件進行返回
},})
上面這個操作是乙個簡易操作,實際上,它首先需要建立乙個元件構造器,然後註冊元件。註冊元件的本質其實就是建立乙個元件構造器的引用。使用元件才是真正建立乙個元件例項。所以,註冊元件其實並不產生新的元件類,但會產生乙個可以用來例項化的新方式。 關於data裡面的資料使用注意
需要注意的問題 記得在this.setdata 外使用時要加this.data.單單使用this.data.xx修改資料後不會在wxml更新的,還要使用this.setdata設定一遍才行 如var that this that.data.flag true 僅僅這樣寫是不會在wxml更新的以下兩種...
Vue裡面的 emit與 on
學習vue看到了裡面的 emit,有乙個疑問冒出來 emit必須和 on一起使用嗎?在我看來雖然沒有說是必須一起使用,但基本上都是搭配在一起出現,因為 emit的作用是子元件對父元件傳送資料,on可以接收到子元件返回的資料,所以有 emit的地方應該就有 on了,我是這樣理解的。emit 的引數ev...
Vue重置當前頁面的data
在某些情況下,需要重新使用data中的資料,但是data中的資料已經被各種表單 變數等賦值,那麼怎麼重置data的值呢?js相關函式函式 含義object.assign target,sources 將所有可列舉屬性值從乙個或多個源物件複製到目標物件 vue中相關函式函式 含義this.data 當...