Vue 實(shí)例

創(chuàng)建一個 Vue 實(shí)例

每個 Vue 應(yīng)用都是通過用 Vue 函數(shù)創(chuàng)建一個新的 Vue 實(shí)例開始的:

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

雖然沒有完全遵循 MVVM 模型稽鞭,但是 Vue 的設(shè)計也受到了它的啟發(fā)壳鹤。因此在文檔中經(jīng)常會使用 vm (ViewModel 的縮寫) 這個變量名表示 Vue 實(shí)例抖苦。

當(dāng)創(chuàng)建一個 Vue 實(shí)例時洋侨,你可以傳入一個選項對象矾瑰。這篇教程主要描述的就是如何使用這些選項來創(chuàng)建你想要的行為。作為參考酵镜,你也可以在 API 文檔 中瀏覽完整的選項列表碉碉。

一個 Vue 應(yīng)用由一個通過 new Vue 創(chuàng)建的根 Vue 實(shí)例,以及可選的嵌套的淮韭、可復(fù)用的組件樹組成垢粮。舉個例子,一個 todo 應(yīng)用的組件樹可以是這樣的:

根實(shí)例
└─ TodoList
  ├─ TodoItem
  │  ├─ DeleteTodoButton
  │  └─ EditTodoButton
  └─ TodoListFooter
     ├─ ClearTodosButton
     └─ TodoListStatistics

我們會在稍后的組件系統(tǒng)章節(jié)具體展開靠粪。不過現(xiàn)在蜡吧,你只需要明白所有的 Vue 組件都是 Vue 實(shí)例粱腻,并且接受相同的選項對象 (一些根實(shí)例特有的選項除外)。

數(shù)據(jù)與方法

當(dāng)一個 Vue 實(shí)例被創(chuàng)建時斩跌,它向 Vue 的響應(yīng)式系統(tǒng)中加入了其 data 對象中能找到的所有的屬性。當(dāng)這些屬性的值發(fā)生改變時捞慌,視圖將會產(chǎn)生“響應(yīng)”耀鸦,即匹配更新為新的值。

                                            JS
// 我們的數(shù)據(jù)對象
var data = { a: 1 }

// 該對象被加入到一個 Vue 實(shí)例中
var vm = new Vue({
  data: data
})

// 獲得這個實(shí)例上的屬性
// 返回源數(shù)據(jù)中對應(yīng)的字段
vm.a == data.a // => true

// 設(shè)置屬性也會影響到原始數(shù)據(jù)
vm.a = 2
data.a // => 2

// ……反之亦然
data.a = 3
vm.a // => 3

當(dāng)這些數(shù)據(jù)改變時啸澡,視圖會進(jìn)行重渲染袖订。值得注意的是只有當(dāng)實(shí)例被創(chuàng)建時 data 中存在的屬性才是響應(yīng)式的。也就是說如果你添加一個新的屬性嗅虏,比如:

                                            JS
vm.b = 'hi'

那么對 b 的改動將不會觸發(fā)任何視圖的更新洛姑。如果你知道你會在晚些時候需要一個屬性,但是一開始它為空或不存在皮服,那么你僅需要設(shè)置一些初始值楞艾。比如:

                                            JS
data: {
  newTodoText: '',
  visitCount: 0,
  hideCompletedTodos: false,
  todos: [],
  error: null
}

這里唯一的例外是使用 Object.freeze(),這會阻止修改現(xiàn)有的屬性龄广,也意味著響應(yīng)系統(tǒng)無法再追蹤變化硫眯。

                                            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>

除了數(shù)據(jù)屬性择同,Vue 實(shí)例還暴露了一些有用的實(shí)例屬性與方法两入。它們都有前綴 $,以便與用戶定義的屬性區(qū)分開來敲才。例如:

                                            JS
var data = { a: 1 }
var vm = new Vue({
  el: '#example',
  data: data
})

vm.$data === data // => true
vm.$el === document.getElementById('example') // => true

// $watch 是一個實(shí)例方法
vm.$watch('a', function (newValue, oldValue) {
  // 這個回調(diào)將在 `vm.a` 改變后調(diào)用
})

以后你可以在 API 參考中查閱到完整的實(shí)例屬性和方法的列表裹纳。

實(shí)例生命周期鉤子

每個 Vue 實(shí)例在被創(chuàng)建時都要經(jīng)過一系列的初始化過程——例如,需要設(shè)置數(shù)據(jù)監(jiān)聽紧武、編譯模板剃氧、將實(shí)例掛載到 DOM 并在數(shù)據(jù)變化時更新 DOM 等。同時在這個過程中也會運(yùn)行一些叫做生命周期鉤子的函數(shù)阻星,這給了用戶在不同階段添加自己的代碼的機(jī)會她我。

比如 created 鉤子可以用來在一個實(shí)例被創(chuàng)建之后執(zhí)行代碼:

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

也有一些其它的鉤子,在實(shí)例生命周期的不同階段被調(diào)用迫横,如 mounted番舆、updateddestroyed。生命周期鉤子的 this 上下文指向調(diào)用它的 Vue 實(shí)例矾踱。
注意:
不要在選項屬性或回調(diào)上使用箭頭函數(shù)恨狈,比如 created: () => console.log(this.a)vm.$watch('a', newValue => this.myMethod())。因為箭頭函數(shù)是和父級上下文綁定在一起的呛讲,this 不會是如你所預(yù)期的 Vue 實(shí)例禾怠,經(jīng)常導(dǎo)致 Uncaught TypeError: Cannot read property of undefinedUncaught TypeError: this.myMethod is not a function 之類的錯誤返奉。

生命周期圖示

在此舉個例子

8個生命周期的用法以及介紹

 //生命周期函數(shù)就是vue實(shí)例在某一個時間點(diǎn)會自動執(zhí)行的函數(shù)
        //生命周期函數(shù)可以直接放到vue實(shí)例中,其他函數(shù)必須放在methods
        var vm=new Vue({
            el:"#app",
            beforeCreate:function () { //當(dāng)創(chuàng)建vue實(shí)例時會調(diào)用此函數(shù)
                console.log("beforeCreate");
            },
            created:function () {   //如果沒有template就會把實(shí)例中的整體當(dāng)做template吗氏,<div id="app">hello world</div>標(biāo)簽以及內(nèi)容
                console.log("created");
            },
            beforeMount:function () {   //模板和數(shù)據(jù)結(jié)合瞬間調(diào)用此函數(shù)
                console.log("beforeMount");
            },
            mounted:function () { //hello world顯示到瀏覽器上就會自動執(zhí)行
                console.log("mounted")
            },
            beforeDestroy:function () { //當(dāng)mv.$destroy()消除實(shí)例  即將銷毀時執(zhí)行
                console.log("beforeDestroy")
            },
            destroyed:function () { //銷毀后執(zhí)行
                console.log("destroyed");
            },
            beforeUpdate:function () { //當(dāng)數(shù)據(jù)發(fā)生改變 渲染前執(zhí)行
                console.log("beforeUpdate");
            },
            updated:function () {   //當(dāng)數(shù)據(jù)被重新渲染后執(zhí)行
                console.log("updated");
            }
        });

友情鏈接:極客大全 http://www.jikedaquan.com/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芽偏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弦讽,更是在濱河造成了極大的恐慌污尉,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件往产,死亡現(xiàn)場離奇詭異被碗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)仿村,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進(jìn)店門锐朴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔼囊,你說我怎么就攤上這事焚志。” “怎么了畏鼓?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵娩嚼,是天一觀的道長。 經(jīng)常有香客問我滴肿,道長岳悟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任泼差,我火速辦了婚禮贵少,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘堆缘。我一直安慰自己滔灶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布吼肥。 她就那樣靜靜地躺著录平,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缀皱。 梳的紋絲不亂的頭發(fā)上斗这,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天,我揣著相機(jī)與錄音啤斗,去河邊找鬼表箭。 笑死,一個胖子當(dāng)著我的面吹牛钮莲,可吹牛的內(nèi)容都是我干的免钻。 我是一名探鬼主播彼水,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼极舔!你這毒婦竟也來了凤覆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拆魏,失蹤者是張志新(化名)和其女友劉穎盯桦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稽揭,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年肥卡,在試婚紗的時候發(fā)現(xiàn)自己被綠了溪掀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡步鉴,死狀恐怖揪胃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氛琢,我是刑警寧澤喊递,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站阳似,受9級特大地震影響骚勘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撮奏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一俏讹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧畜吊,春花似錦泽疆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捌年,卻和暖如春瓢娜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背礼预。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工恋腕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逆瑞。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓荠藤,卻偏偏與公主長得像伙单,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哈肖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容