Vue學習二 實例創建

Vue實例:

創建一個Vue實例:

    每個Vue應用都是通過Vue函數創建一個新的Vue實例開始的:

var vm = new Vue({
    //選項
})

Vue的設計受到MVVM模型的啓發,當創建一個實例時,可以傳入一個選項對象。

一個Vue應用通過new Vue創建的跟Vue實例,和可選的嵌套的、可複用的組件數組

成。

數據和方法:

    當一個Vue實例被創建的時候,它向Vue的響應式系統中加入了其data對象中能找

到的所有屬性,當這些屬性的值發生改變的時候,視圖將會產生響應,即匹配更新的

值。

數據對象

var data = {a:1}

該對象被加入到一個Vue實例中

var vm = new Vue({

    data:data

})

獲得這個實例上的屬性,返回源數據中對應的字段

vm.a == data.a //返回true

設置屬性也會影響到原始數據

vm.a = 2

data.a // =>2

data.a = 3

vm.a // =>3

當這些數據發生改變的時候,視圖會重新進行渲染,只有當實例被創建的時候data中

存在的屬性纔是響應式的,也就是說如果添加新屬性,例如:

vm.b = "hi"

那麼b的改動將不會觸發任何視圖的更新,如果你知道會在晚些時候需要一個屬性

,但是一個開始它爲空或者不存在,那麼你僅僅需要設置一些初始值,比如

data:{

 newTodoText:'',        初始化一個文本爲空

 visitCount:0,             初始化一個數字爲0

 hideCompletedTodos:false,  初始化一個bool爲false

 todos:[],                    初始化一個數組爲空數組

 error:null                   初始化一個錯誤提示爲空

}

這裏唯一的例外是使用Object.freeze(),這會阻止修改現有的屬性,也意味着相應

系統無法追蹤變化

var obj = {

foo:"bar"

}

Object.freeze(obj)

new Vue({

el:'#app',

data:obj

})

<div id="app">

<p>{{foo}}</p>

<button v-on:click="foo='naz'">change it </button>

</div>

除了數據屬性,Vue實例還暴露了一些有用的實例屬性與方法,他們都有前綴$,便

於與用戶定義的屬性區分,例如:

var data = { a:1 }

var vm = new Vue({

    el:"#example",

    data:data

})

vm.$data === data // = >返回true

vm.$el === document.getElementById("element"); // = > 返回true

vm.$watch("a",function(newValue,oldValue){

//這個會掉將會在vm.a調用後改變

})

實例生命週期鉤子

每個Vue實例在被創建的時候都要經歷一系列的初始化過程,例如,需要設置數據監

聽、編譯模板,將實例掛載到DOM並在數據變化時更新DOM等。同時在這個過程中

也會運行一些叫做生命週期鉤子的函數,這可以實現在不同階段添加不同代碼

比如created鉤子可以用來在一個實例被創建之後執行代碼:

new Vue({

    data:{

        a:1

    },

    created:function(){

        console.log("a is" + this.a);

    }

})        // a is 1

也有一些其他的鉤子,在實例生命週期的不同階段被調用,比如:

mounted、updated和destroyed

生命週期鉤子的this上下文指向調用Vue實例

注意:

    不要在選項屬性或者回調上使用箭頭函數,例如:

created: ()=> console.log(this.a)

vm.$watch("a",newValue=>this.myMethod())

原因:

    箭頭函數是和父級上下文綁定在一起的,this不會是如你所預期的Vue實例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章