<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!--引入Vue.js--> <script src="https://cdn.jsdelivr.net/npm/vue"></script> <title>無標題文檔</title> </head> <body> <div id="app"> {{ a }} </div> <div id="app2"> <p>{{ foo }}</p> <!-- 這裏的 `foo` 不會更新! --> <button v-on:click="foo = 'bazzzz'">Change it</button> </div> </body> </html> <script type="text/javascript"> // 咱們的數據對象 var data = { a: 123 } // 該對象被加入到一個 Vue 實例中 var vm = new Vue({ el: '#app', data: data }) // 設置屬性也會影響到原始數據 vm.a = 456; // 當這些數據改變時,視圖會進行重渲染。值得注意的是只有當實例被建立時 data 中存在的屬性纔是響應式的。也就是說若是你添加一個新的屬性,好比: vm.b = 'hi'; // 由於b在上面沒有被建立,因此這裏改變b的屬性值,不會從新渲染。 // 那麼對 b 的改動將不會觸發任何視圖的更新。若是你知道你會在晚些時候須要一個屬性,可是一開始它爲空或不存在,那麼你僅須要設置一些初始值。好比: /*data: { newTodoText: '', visitCount: 0, hideCompletedTodos: false, todos: [], error: null }*/ // 這裏惟一的例外是使用 Object.freeze(),這會阻止修改現有的屬性,也意味着響應系統沒法再追蹤變化。 var obj = { foo: 'bar' } Object.freeze(obj);//阻止修改現有的屬性,點擊按鈕後不會修改foo的屬性值。 new Vue({ el: '#app2', data: obj }) // 每一個 Vue 實例在被建立時都要通過一系列的初始化過程——例如,須要設置數據監聽、編譯模板、將實例掛載到 DOM 並在數據變化時更新 DOM 等。同時在這個過程當中也會運行一些叫作生命週期鉤子的函數,這給了用戶在不一樣階段添加本身的代碼的機會。 // 好比 created 鉤子能夠用來在一個實例被建立以後執行代碼: new Vue({ data: { a: 1 }, created: function () { // `this` 指向 vm 實例 console.log('a is: ' + this.a) } }) // 也有一些其它的鉤子,在實例生命週期的不一樣階段被調用,如 mounted、updated 和 destroyed。生命週期鉤子的 this 上下文指向調用它的 Vue 實例。 // 不要在選項屬性或回調上使用箭頭函數,好比 created: () => console.log(this.a) 或 vm.$watch('a', newValue => this.myMethod())。由於箭頭函數是和父級上下文綁定在一塊兒的,this 不會是如你所預期的 Vue 實例,常常致使 Uncaught TypeError: Cannot read property of undefined 或 Uncaught TypeError: this.myMethod is not a function 之類的錯誤。 </script>