Vue.js每天必學(xué)之構(gòu)造器與生命周期
構(gòu)造器
每個(gè) Vue.js 應(yīng)用的起步都是通過(guò)構(gòu)造函數(shù) Vue 創(chuàng)建一個(gè) Vue 的根實(shí)例:
var vm = new Vue({ // 選項(xiàng) })
一個(gè) Vue 實(shí)例其實(shí)正是一個(gè) MVVM 模式中所描述的 ViewModel - 因此在文檔中經(jīng)常會(huì)使用 vm 這個(gè)變量名。
在實(shí)例化 Vue 時(shí),需要傳入一個(gè)選項(xiàng)對(duì)象,它可以包含數(shù)據(jù)、模板、掛載元素、方法、生命周期鉤子等選項(xiàng)。全部的選項(xiàng)可以在 API 文檔中查看。
可以擴(kuò)展 Vue 構(gòu)造器,從而用預(yù)定義選項(xiàng)創(chuàng)建可復(fù)用的組件構(gòu)造器:
var MyComponent = Vue.extend({ // 擴(kuò)展選項(xiàng) }) // 所有的 `MyComponent` 實(shí)例都將以預(yù)定義的擴(kuò)展選項(xiàng)被創(chuàng)建 var myComponentInstance = new MyComponent()
盡管可以命令式地創(chuàng)建擴(kuò)展實(shí)例,不過(guò)在多數(shù)情況下將組件構(gòu)造器注冊(cè)為一個(gè)自定義元素,然后聲明式地用在模板中。我們將在后面詳細(xì)說(shuō)明組件系統(tǒng)。現(xiàn)在你只需知道所有的 Vue.js 組件其實(shí)都是被擴(kuò)展的 Vue 實(shí)例。
屬性與方法
每個(gè) Vue 實(shí)例都會(huì)代理其 data 對(duì)象里所有的屬性:
var data = { a: 1 } var vm = new Vue({ data: data }) vm.a === data.a // -> true // 設(shè)置屬性也會(huì)影響到原始數(shù)據(jù) vm.a = 2 data.a // -> 2 // ... 反之亦然 data.a = 3 vm.a // -> 3
注意只有這些被代理的屬性是響應(yīng)的。如果在實(shí)例創(chuàng)建之后添加新的屬性到實(shí)例上,它不會(huì)觸發(fā)視圖更新。我們將在后面詳細(xì)討論響應(yīng)系統(tǒng)。
除了這些數(shù)據(jù)屬性,Vue 實(shí)例暴露了一些有用的實(shí)例屬性與方法。這些屬性與方法都有前綴 $,以便與代理的數(shù)據(jù)屬性區(qū)分。例如:
var data = { a: 1 } var vm = new Vue({ el: '#example', data: data }) vm.$data === data // -> true vm.$el === document.getElementById('example') // -> true // $watch 是一個(gè)實(shí)例方法 vm.$watch('a', function (newVal, oldVal) { // 這個(gè)回調(diào)將在 `vm.a` 改變后調(diào)用 })
參考 API 文檔查看全部的實(shí)例屬性與方法。
實(shí)例生命周期
Vue 實(shí)例在創(chuàng)建時(shí)有一系列初始化步驟——例如,它需要建立數(shù)據(jù)觀察,編譯模板,創(chuàng)建必要的數(shù)據(jù)綁定。在此過(guò)程中,它也將調(diào)用一些生命周期鉤子,給自定義邏輯提供運(yùn)行機(jī)會(huì)。例如 created鉤子在實(shí)例創(chuàng)建后調(diào)用:
var vm = new Vue({ data: { a: 1 }, created: function () { // `this` 指向 vm 實(shí)例 console.log('a is: ' + this.a) } }) // -> "a is: 1"
也有一些其它的鉤子,在實(shí)例生命周期的不同階段調(diào)用,如 compiled、 ready 、destroyed。鉤子的 this 指向調(diào)用它的 Vue 實(shí)例。一些用戶(hù)可能會(huì)問(wèn) Vue.js 是否有“控制器”的概念?答案是,沒(méi)有。組件的自定義邏輯可以分割在這些鉤子中。
生命周期圖示
下圖說(shuō)明了實(shí)例的生命周期。你不需要立馬弄明白所有的東西,不過(guò)以后它會(huì)有幫助。
本文已被整理到了《Vue.js前端組件學(xué)習(xí)教程》,歡迎大家學(xué)習(xí)閱讀。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
preload對(duì)比prefetch的功能區(qū)別詳解
這篇文章主要為大家介紹了preload對(duì)比prefetch的使用區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06vue自定義組件(通過(guò)Vue.use()來(lái)使用)即install的用法說(shuō)明
這篇文章主要介紹了vue自定義組件(通過(guò)Vue.use()來(lái)使用)即install的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08解決Antd Table組件表頭不對(duì)齊的問(wèn)題
這篇文章主要介紹了解決Antd Table組件表頭不對(duì)齊的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10輕松理解vue的雙向數(shù)據(jù)綁定問(wèn)題
Vue是當(dāng)前很火的一款MVVM的輕量級(jí)框架,它是以數(shù)據(jù)驅(qū)動(dòng)和組件化的思想構(gòu)建的。因?yàn)樗峁┝撕?jiǎn)潔易于理解的api,使得我們很容易上手。這篇文章給大家介紹了vue雙向數(shù)據(jù)綁定問(wèn)題,感興趣的朋友一起看看吧2017-10-10vuex?mutation?action同級(jí)調(diào)用方式
這篇文章主要介紹了vuex?mutation?action同級(jí)調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03vue項(xiàng)目使用CDN引入的配置與易出錯(cuò)點(diǎn)
在日常開(kāi)發(fā)過(guò)程中,為了減少最后打包出來(lái)的體積,我們會(huì)用到cdn引入一些比較大的庫(kù)來(lái)解決,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目使用CDN引入的配置與易出錯(cuò)點(diǎn)的相關(guān)資料,需要的朋友可以參考下2022-05-05vue開(kāi)發(fā)頁(yè)面自適應(yīng)屏幕尺寸的實(shí)例代碼
使用vue開(kāi)發(fā)的頁(yè)面都是通過(guò)px設(shè)置它的尺寸,如果換了一個(gè)不同尺寸的屏幕就會(huì)出現(xiàn)頁(yè)面排版錯(cuò)亂,顯示不完整等情況,下面通過(guò)插件將px裝換為rem單位適應(yīng)不同尺寸的屏幕,需要的朋友可以參考下2022-12-12