Vue.js每天必學(xué)之構(gòu)造器與生命周期
構(gòu)造器
每個(gè) Vue.js 應(yīng)用的起步都是通過構(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í)例,不過在多數(shù)情況下將組件構(gòu)造器注冊(cè)為一個(gè)自定義元素,然后聲明式地用在模板中。我們將在后面詳細(xì)說明組件系統(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ù)綁定。在此過程中,它也將調(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í)例。一些用戶可能會(huì)問 Vue.js 是否有“控制器”的概念?答案是,沒有。組件的自定義邏輯可以分割在這些鉤子中。
生命周期圖示
下圖說明了實(shí)例的生命周期。你不需要立馬弄明白所有的東西,不過以后它會(huì)有幫助。

本文已被整理到了《Vue.js前端組件學(xué)習(xí)教程》,歡迎大家學(xué)習(xí)閱讀。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue3為什么要用proxy替代defineProperty
這篇文章主要介紹了vue3為什么要用proxy替代defineProperty,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
vue-video-player?播放m3u8視頻流的實(shí)現(xiàn)
本文主要介紹了vue-video-player?播放m3u8視頻流的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
Vue?3?表格時(shí)間監(jiān)控與動(dòng)態(tài)后端請(qǐng)求觸發(fā)詳解?附Demo展示
在Vue3中,使用el-table組件渲染表格數(shù)據(jù),通過el-table-column指定內(nèi)容,時(shí)間點(diǎn)需前端校準(zhǔn),用getTime()比較,到達(dá)時(shí)觸發(fā)操作,異步API請(qǐng)求可用async/await處理,setInterval實(shí)現(xiàn)定時(shí)監(jiān)控,配合條件判斷防止重復(fù)請(qǐng)求2024-09-09
Vue中設(shè)置背景圖片和透明度的簡(jiǎn)單方法
在做項(xiàng)目的時(shí)候常需要設(shè)置背景圖片和透明度,下面這篇文章主要給大家介紹了關(guān)于Vue中設(shè)置背景圖片和透明度的簡(jiǎn)單方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
尤雨溪開發(fā)vue?dev?server理解vite原理
這篇文章主要為大家介紹了尤雨溪開發(fā)的玩具vite,vue-dev-server來理解vite原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Vue使用el-upload批量上傳圖片時(shí)報(bào)錯(cuò)問題處理方法
相信大家都知道在element-ui中,el-upload可以進(jìn)行文件多選操作,下面這篇文章主要給大家介紹了關(guān)于Vue使用el-upload批量上傳圖片時(shí)報(bào)錯(cuò)問題的處理方法,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
vue.js 實(shí)現(xiàn)輸入框動(dòng)態(tài)添加功能
這篇文章主要介紹了vue.js 實(shí)現(xiàn)輸入框動(dòng)態(tài)添加功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06
Element-ui中的Cascader級(jí)聯(lián)選擇器基礎(chǔ)用法
這篇文章主要為大家介紹了Element-ui中的Cascader級(jí)聯(lián)選擇器基礎(chǔ)用法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06

