<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 創建一個 Vue 實例 每個 Vue 應用都是通過用 `Vue` 函數創建一個新的 **Vue 實例**開始的: ```js var vm = new Vue({ // 選項 }) ``` 雖然沒有完全遵循 [MVVM 模型](https://zh.wikipedia.org/wiki/MVVM),但是 Vue 的設計也受到了它的啟發。因此在文檔中經常會使用 `vm` (ViewModel 的縮寫) 這個變量名表示 Vue 實例。 當創建一個 Vue 實例時,你可以傳入一個**選項對象**。這篇教程主要描述的就是如何使用這些選項來創建你想要的行為。作為參考,你也可以在 [API 文檔](../api/#選項-數據) 中瀏覽完整的選項列表。 一個 Vue 應用由一個通過 `new Vue` 創建的**根 Vue 實例**,以及可選的嵌套的、可復用的組件樹組成。舉個例子,一個 todo 應用的組件樹可以是這樣的: ``` 根實例 └─ TodoList ├─ TodoItem │ ├─ DeleteTodoButton │ └─ EditTodoButton └─ TodoListFooter ├─ ClearTodosButton └─ TodoListStatistics ``` 我們會在稍后的[組件系統](components.html)章節具體展開。不過現在,你只需要明白所有的 Vue 組件都是 Vue 實例,并且接受相同的選項對象 (一些根實例特有的選項除外)。 ## 數據與方法 當一個 Vue 實例被創建時,它向 Vue 的**響應式系統**中加入了其 `data` 對象中能找到的所有的屬性。當這些屬性的值發生改變時,視圖將會產生“響應”,即匹配更新為新的值。 ```js // 我們的數據對象 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` 中存在的屬性才是**響應式**的。也就是說如果你添加一個新的屬性,比如: ```js vm.b = 'hi' ``` 那么對 `b` 的改動將不會觸發任何視圖的更新。如果你知道你會在晚些時候需要一個屬性,但是一開始它為空或不存在,那么你僅需要設置一些初始值。比如: ```js data: { newTodoText: '', visitCount: 0, hideCompletedTodos: false, todos: [], error: null } ``` 這里唯一的例外是使用 `Object.freeze()`,這會阻止修改現有的屬性,也意味著響應系統無法再*追蹤*變化。 ```js var obj = { foo: 'bar' } Object.freeze(obj) new Vue({ el: '#app', data: obj }) ``` ```html <div id="app"> <p>{{ foo }}</p> <!-- 這里的 `foo` 不會更新! --> <button v-on:click="foo = 'baz'">Change it</button> </div> ``` 除了數據屬性,Vue 實例還暴露了一些有用的實例屬性與方法。它們都有前綴 `$`,以便與用戶定義的屬性區分開來。例如: ```js 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` 改變后調用 }) ``` 以后你可以在 [API 參考](../api/#實例屬性)中查閱到完整的實例屬性和方法的列表。 ## 實例生命周期鉤子 每個 Vue 實例在被創建時都要經過一系列的初始化過程——例如,需要設置數據監聽、編譯模板、將實例掛載到 DOM 并在數據變化時更新 DOM 等。同時在這個過程中也會運行一些叫做**生命周期鉤子**的函數,這給了用戶在不同階段添加自己的代碼的機會。 比如 [`created`](../api/#created) 鉤子可以用來在一個實例被創建之后執行代碼: ```js new Vue({ data: { a: 1 }, created: function () { // `this` 指向 vm 實例 console.log('a is: ' + this.a) } }) // => "a is: 1" ``` 也有一些其它的鉤子,在實例生命周期的不同階段被調用,如 [`mounted`](../api/#mounted)、[`updated`](../api/#updated) 和 [`destroyed`](../api/#destroyed)。生命周期鉤子的 `this` 上下文指向調用它的 Vue 實例。 <p class="tip">不要在選項屬性或回調上使用[箭頭函數](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions),比如 `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` 之類的錯誤。</p> ## 生命周期圖示 下圖展示了實例的生命周期。你不需要立馬弄明白所有的東西,不過隨著你的不斷學習和使用,它的參考價值會越來越高。 ![Vue 實例生命周期](/images/lifecycle.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看