1. 程式人生 > >創建一個 Vue 的實例

創建一個 Vue 的實例

技術 就是 doc utl pda 可復用 read ack eve

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

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

因此在文檔中經常會使用vm (ViewModel 的簡稱) 這個變量名表示 Vue 實例。

當創建一個 Vue 實例時,你可以傳入一個選項對象。這篇教程主要描述的就是如何使用這些選項來創建你想要的行為。作為參考,你也可以在 API 文檔 中瀏覽完整的選項列表。

一個 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, hideCompletedTodos: false, todos: [], error: null }

除了 data 屬性,Vue 實例暴露了一些有用的實例屬性與方法。它們都有前綴 $,以便與用戶定義的屬性區分開來。例如:

var data = { a: 1 } var vm = new Vue({ el: ‘#example‘,
data: data }) vm.$data === data // => true vm.$el === document.getElementById(‘example‘) // => true // $watch 是一個實例方法 vm.$watch(‘a‘, function (newValue, oldValue) { // 這個回調將在 `vm.a` 改變後調用 })

實例生命周期

每個 Vue 實例在被創建之前都要經過一系列的初始化過程。例如需要設置數據監聽、編譯模板、掛載實例到 DOM、在數據變化時更新 DOM 等。同時在這個過程中也會運行一些叫做生命周期鉤子的函數,給予用戶機會在一些特定的場景下添加他們自己的代碼。

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

new Vue({ data: { a: 1 }, created: function () { // `this` 指向 vm 實例 console.log(‘a is: ‘ + this.a) } }) // => "a is: 1"

也有一些其它的鉤子,在實例生命周期的不同場景下調用,如mountedupdateddestroyed。鉤子的 this 指向調用它的 Vue 實例。

不要在選項屬性或回調上使用箭頭函數,比如created: () => console.log(this.a)vm.$watch(‘a‘, newValue => this.myMethod())。因為箭頭函數是和父級上下文綁定在一起的,this 不會是如你所預期的 Vue 實例,經常導致Uncaught TypeError: Cannot read property of undefinedUncaught TypeError: this.myMethod is not a function 之類的錯誤。

生命周期圖示

下圖說明了實例的生命周期。你不需要立馬弄明白所有的東西,不過隨著你的不斷學習和使用,它的參考價值會越來越高。

技術分享

創建一個 Vue 的實例