前沿
内容過多,長達7萬字無法顯示,請到掘金上看https://juejin.im/post/5e6e2a5a5188254974680f6a
置身世外隻為暗中觀察!!!Hello大家好,我是魔王哪吒!重學鞏固你的Vuejs知識體系,如果有哪些知識點遺漏,還望在評論中說明,讓我可以及時更新本篇内容知識體系。歡迎點贊收藏!
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SNhRjZ0EDOzUTM5IjY3IWNmRjNlVzY5YmMjZmY4EGZz8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
轉角遇到Vuejs
- 你為啥學習Vuejs
- 前端開發的複雜化
- Vuejs的特點
- 安裝Vuejs
- 體驗Vuejs
- MVVM架構:data和Vue對象的分離,Vue中的MVVM
目錄:
起步
- 插值文法:Mustache,v-once,v-html,v-text,v-pre,v-block。
- 綁定屬性:v-bind的介紹,v-bind的基礎,v-bind的文法糖,綁定class,綁定樣式。
- 計算屬性
- 事件監聽:v-on介紹,v-on基礎,v-on參數,v-on修飾符
- 條件和循環:條件渲染,v-show指令,v-if和v-show對比
- 表單綁定:基本使用,v-model原理,其他類型,值綁定,修飾符。
元件化開發:
什麼是元件化,Vue元件化開發思想
- 注冊的步驟
- 全局和局部元件
- 父元件和子元件
- 注冊元件文法糖
- 模闆的分離寫法
- 元件的其他屬性
- 父級向子級傳遞
- 子級向父級傳遞
- 父子元件的通路
- 非父子元件通信
元件化進階文法:
- 插槽slot:編譯作用域,為什麼使用slot,slot的基本使用,slot的具名插槽,slot的作用域插槽。
- 動态元件
- 異步元件
- 元件聲明周期
Vue Cli
- 什麼是webpack
- webpack和gulp對比
- 手動webpack的配置
- Vue Cli是什麼
- Vue Cli依賴環境
- Vue Cli的安裝
網絡封裝
- 使用傳統的Ajax是基于XMLHttpRequest(XHR)
- 使用jQuery-Ajax
- Vue-resource
- 使用axios
axios的使用
- 了解axios:axios請求方式
- 發送請求,發送get請求,發送并發請求,axios全局配置,常見配置選項。
- axios執行個體,為什麼建立axios執行個體,如何建立axios執行個體,axios的封裝。
- axios的攔截器:請求和響應
vuejs原理相關:響應式原理,源碼。
vue.js是什麼
- vue是一套用于建構使用者界面的漸進式架構。
- 從底向上逐層應用,核心庫是隻關注圖層。
- 易于學習,便于與第三方庫或既有項目整合。
Vue基礎文法
對于基礎知識需要掌握,簡單寫寫✍
vue.js安裝
直接CDN引入:
- 對于制作原型或學習
代碼:
- 對于生産環境
代碼:
- NPM
代碼:
# 最新穩定版$ npm install vue
vue響應式初體驗
聲明式程式設計:
代碼:
{{ a }}
// 我們的資料對象 var data = { a: 1 }; // 該對象被加入到一個 Vue 執行個體中 var vm = new Vue({ el: "#app", data: data }); // data.a = "dada" vm.a = "qianduan"; data.a == vm.a;
小案例-電腦
- 新的屬性:
,該屬性是用于methods
對象中定義的方法。Vue
- 新的指令:
,該指令是用于監聽某個元素的點選事件,并且需要指定當發生點選時,執行的方法。@click
代碼:
目前計數{{counter}}
目前計數{{counter}}
+
-
let app = new Vue({ el: '#app', data: { counter: 0 }, methods: { increment(){ this.counter++ }, decrement(){ this.counter-- }, } })
Vue中的MVVM
MVVM的思想
- view是我們的DOM
- Model是我們抽離出來的obj
- ViewModel是我們建立的Vue對象執行個體
它們之間是如何工作的呢?
- ViewModel通過Data Binding讓obj中的資料實時在DOM中顯示
- ViewModel通過DOM Listener來監聽DOM事件,并且通過methods中的操作,來改變obj中的資料
-
:類型:el
string | HTMLElement
- 作用:決定之後Vue執行個體會管理哪一個
DOM
-
:類型:data
Object | Function
- 作用:Vue執行個體對應的資料對象
-
:類型:methods
{[key:string]:Function}
- 作用:定義屬于Vue的一些方法,可以在其他地方調用,也可以在指令中使用。
什麼是Vue的生命周期
生命周期:☞ 事物從誕生到消亡的整個過程
-
穩定版本release
-
版本debug
- Mustache文法也就是雙大括号
- 插值操作
- 綁定屬性
- 計算屬性
- 事件判斷
- 循環周遊
- 階段案例
- v-model
v-once
指令的使用
{{message}}
{{message}}
{{message}}
{{message}}
v-once
:
- 該指令後面不需要跟任何表達式
- 該指令表示元素群組件隻渲染一次,不會随着資料的改變而改變
v-html
:
當我們從伺服器請求到的資料本身就是一個HTML代碼時
- 如果直接通過
來輸出,會将{{}}
格式進行解析,并且顯示對應的内容。HTML
- 可以使用
指令v-html
- 該指令後跟上一個
類型string
- 會将
的string
解析處理并且進行渲染html
v-text
的作用和
Mustache
比較相似,獨使用于将資料顯示在界面中,一般情況下,接受一個
string
類型。
{{message}}
{{message}}
let vm = new Vue({ el: '#app', data: { message: '你好' } })
v-pre
用于跳過這個元素和它子元素的編譯過程,用于顯示原本的
Mustache
文法。
{{message}}
let app = new Vue({ el: '#app', data: { message: 'hello' } })
v-cloak
鬥篷的意思。
hello{{name}}
hello{{name}}
setTimeout(()=>{ let app = new Vue({ el: '#app', data: { name: 'web' } }) },10000) [v-cloak] { display: none; }
v-bind的介紹
v-bind
用于綁定一個或多個屬性值,或者向另一個元件傳遞
props
值。
vuejs
vue :class 動态綁定樣式_前端面試必備的Vue良藥目前計數{{counter}}{{message}}{{message}}web
let app = new Vue({ el: '#app', data: { } })
v-bind
文法糖
v-bind
有一個對應的文法糖,就是簡寫方式
vuejs
vue :class 動态綁定樣式_前端面試必備的Vue良藥目前計數{{counter}}{{message}}{{message}}web
v-bind
動态綁定class
.active{ color: red; }
{{message}}
{{message}}
const app = new Vue({ el: '#app', data: { message: 'hello' } })
綁定
class
有兩種方式:
- 對象文法
- 數組文法
對象文法:
用法一:直接通過{}綁定一個類
hello
hello
用法二,傳入多個值
hello
hello
用法三:
用法四:可以放在一個methods或者computed中
hello
hello
v-bind
動态綁定class,數組文法
{{mesg}}
{{mesg}}
{{mesg}}
{{mesg}}
const app = new Vue({ el: '#app', data: { message: 'hello', active: 'aaa', line: 'bbb', }, methods: { getClasses: function() { return [this.active, this.line] } } })
v-bind
動态綁定style
對象文法和數組文法兩種綁定。
綁定方法:對象文法:
:style="{ color: currentColor, fontSize: fontSize + 'px' }"
style
後面跟的是一個對象類型,對象的
key
是
css
屬性名稱,對象的
value
是具體賦的值,值可以來自于
data
中的屬性。
綁定方法:數組文法:
style
後面跟的是一個數組的類型,多個值,分割即可。
計算屬性的基本屬性
計算屬性,寫在執行個體的
computed
選項中:
{{firstName}}{{lastName}}
{{firstName}}{{lastName}}
const vm = new Vue({ el: '#app', data: { firstName: 'web', lastName: 'it', } })
{{fullName}}
{{fullName}}
const vm = new Vue({ el: '#app', data: { firstName: 'jeskson', lastName: 'it', }, computed: { fullName() { return this.firstName + ' ' + this.lastName } } })
計算屬性的緩存:
為什麼使用計算屬性這個東西?
原因:計算屬性會進行緩存,如果多次使用時,計算屬性隻會調用一次。
setter和getter
每個計算屬性都包含一個getter和一個setter
{{fullName}}
{{firstName}}
{{lastName}}
let vm = new Vue({ el: '#app', data: { firstName: 'web', lastName: 'it', }, computed: { fullName: { get() { rturn this.firstName+" "+this.lastName }, set(newValue){ const names = newValue.split(' ') this.firstName = names[0] this.lastName = names[1] } } } })
computed: { fullName: function() { return this.firstName+" "+this.lastName } // 計算屬性一般是沒有set方法,隻讀屬性。 fullName: { get: function() { return this.firstName + " " + this.lastName } }}
const的使用
const的使用,在JavaScript中使用const修飾的辨別符為常量,不可以再次指派。
在es6開發中,優先使用const,隻有需要改變一個辨別符的時候才使用let。
在使用cost定義辨別符,必須進行指派。
常量的含義是指向的對象不能修改,但是可以改變對象内部的屬性。
什麼時候使用const呢?
當我們修飾的辨別符不會被再次指派時,就可以使用const來保證資料的安全性。
const的使用:
const a=20;a = 10; // 錯誤:不可以修改const name; // 錯誤,const修飾的辨別符必須指派
let和var
塊級作用域:
JS中使用var來聲明一個變量,變量的作用域主要是和函數的定義有關。
對于其他塊定義來說是沒有作用域的,比如if/for等,開發中往往會引發一些問題。
// 監聽按鈕的點選var btns = document.getElementsByTagName('button');for(var i=0; i (function(i){ btns[i].onclick = function(){ alert('點選了'+i+"個") } })(i)}
let btns = document.getElementsByTagName('button');for(let i=0;i btns[i].onclick = function(){ alert('點選了'+i+'個') }}
塊級作用域
變量作用域:變量在什麼範圍内是可用的。
var func;if(true) { var name = 'web'; func = function() { console.log(name); // web } func(); // web}// name = 'it'func(); // web -> itconsole.log(name); // web -> it
沒有塊級作用域引起的問題,for的塊級
var btns = document.getElementsByTagName('button');for(var i=0; i btns[i].addEventListener('click', function(){ console.log('第'+i+'個按鈕被點選'); })}
閉包:
var btns = document.getElementsByTagName('button');for(var i=0; i (function(i){ btns[i].addEventListener('click', function(){ console.log('第'+i+'個按鈕'); }) })(i)}
為什麼閉包可以解決問題,因為函數是一個作用域。
對象的增強寫法
屬性初始化簡寫和方法的簡寫:
// 屬性的簡寫// es6前let name = 'web'let age = 12let obj1 = { name: name, age: age,}console.log(obj1);// es6後let obj2 = { name, age}console.log(obj2)
// 方法的簡寫// es6之前let obj1 = { test: function() { console.log('obj1') }}obj1.test();// es6後let obj2 = { test() { console.log('obj2') }}obj2.test();
v-on基礎
v-on:click="counter++"
點選次數:{{counter}}
點選次數:{{counter}}
按鈕點選
按鈕點選2
let app = new Vue({ el: '#app', data: { counter: 0 }, methods: { btnClick(){ this.counter++ } }})
v-on修飾符的使用
web
按鈕
Vue提供了一些修飾符:
.stop 調用event.stopPropagation().prevent 調用event.preventDefault().native 監聽元件根元素的原生事件.once 隻觸發一次回調
// 停止冒泡// 阻止預設行為// 阻止預設行為,沒有表達式// 串聯修飾符// 鍵修飾符,鍵别名// 鍵修飾符,鍵代碼// 點選回調智慧觸發一次
v-if,v-else-if,v-else
v-if,v-else-if,v-else
簡單使用:
優秀
良好
及格
不及格
登入切換:
使用者賬号:
郵箱位址:
切換類型
let app = new Vue({ el: '#app', data: { type: 'username' }, methods: { handleToggle(){ this.type = this.type === 'email' ? 'username' : 'email' } } })
使用者賬戶
使用者郵箱
切換類型
const app = new Vue({ el: '#app', data: { isUser: true }})
v-for周遊對象
v-for周遊對象
{{value}}-{{key}}-{{index}}
let app = new Vue({ el: '#app', data: { info: { name: 'web', age: 12, } } })
元件的Key屬性
元件的Key屬性
使用v-for時,給對應的元素或元件添加上一個
:key
屬性。
key的作用主要是為了高效的更新虛拟dom。
數組中哪些方法是響應式的
push()pop() 删除數組中的最後一個元素shift() 删除數組中的第一個元素unshift() 在數組最前面添加元素splice()sort()reverse()
購物車
購物車
書籍名稱
出版日期
價格
購買數量
操作
{{value}}
表單綁定v-model
表單綁定v-model
vue中使用v-model指令來實作表單元素和資料的雙向綁定。
{{message}}
{{message}}
reduce作用對數組中所有的内容進行彙總。
vue :class 動态綁定樣式_前端面試必備的Vue良藥目前計數{{counter}}{{message}}{{message}}web
JavaScript reduce() 方法
var numbers = [65, 44, 12, 4]; function getSum(total, num) { return total + num;}function myFunction(item) { document.getElementById("demo").innerHTML = numbers.reduce(getSum);}
定義和用法
reduce() 方法接收一個函數作為累加器,數組中的每個值(從左到右)開始縮減,最終計算為一個值。
reduce() 可以作為一個高階函數,用于函數的 compose。
注意:
reduce()
對于空數組是不會執行回調函數的。
文法
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
v-model的使用以及原理
v-model的使用以及原理
const app = new Vue({ el: '#app', data: { message: '你好啊' }, methods: { valueChange(event){ this.message = event.target.value; } } })
v-model
是文法糖,本質:
v-bind
綁定一個
value
屬性
v-on
指令給目前元素綁定
input
事件
代碼:
父元件和子元件
父元件和子元件
元件樹
元件群組件之間存在層級關系其中一種非常重要的關系就是父子元件的關系
示例:
// 建立一個子元件構造器 const childComponent = Vue.extend({ template: `
我是子元件的内容
` }) // 建立一個父元件的構造器 const parentComponent = Vue.extend({ template: `
我是父元件的内容
` components: { 'child-cpn': childComponent } }) let app = new Vue({ el: '#app', components: { 'parent-cpn': parentComponent } })
注冊元件的文法糖
示例:全局元件
// 全局元件注冊的文法糖 // 注冊元件 Vue.component('cpn1', { template: `
web
web
` }) const app = new Vue({ el: '#app', data: { message: 'web', } })
// 注冊局部元件的文法糖const app = new Vue({ el: '#app', data: { message: 'web' }, components: { 'cpn2': { template: `
web
web
` } }})
vue
簡化了注冊元件的方式,提供了注冊的文法糖。
元件模闆抽離的寫法
元件模闆抽離的寫法
vue
提供了兩種定義
html
子產品内容:
使用
标簽使用
标簽
示例:
web
web
let app = new Vue({ el: '#app', components: { 'my-cpn': { template: '#myCpn' } } })
template
标簽
web
web
// 注冊一個全局元件Vue.component('cpn', { template: '#cpn'})
元件可以通路vue執行個體資料嗎
元件是一個單獨的功能子產品封裝,有屬于自己的
html
模闆和自己的資料
data
。
元件對象有一個
data
屬性,
methods
屬性,這個
data
屬性必須是一個函數,函數傳回一個對象,對象内部儲存着資料。
{{message}}
let app = new Vue({ el: '#app', components: { 'my-cpn': { template: 'myCpn', data() { return{ message: 'web' } } } }})
父子通信-父傳子props
父子通信-父傳子props
如何進行父子元件間的通信呢?
通過
props
向子元件傳遞資料通過事件向父元件發送消息
props
基本用法
在元件中,使用
props
來聲明從父級接收到的資料
props
值:
字元串數組,數組中的字元串就是傳遞時的名稱。對象,對象可以設定傳遞時的類型,也可以設定預設值等。
camelCase
(駝峰命名法) 的
prop
名需要使用其等價的
kebab-case
(短橫線分隔命名) 命名:
Vue.component('blog-post', { // 在 JavaScript 中是 camelCase 的 props: ['postTitle'], template: '
{{ postTitle }}
{{ postTitle }}
'})
重申一次,如果你使用字元串模闆,那麼這個限制就不存在了。
prop
各自的名稱和類型:
props: { title: String, likes: Number, isPublished: Boolean, commentIds: Array, author: Object, callback: Function, contactsPromise: Promise // or any other constructor}
v-bind: by ' + post.author.name">
傳入一個對象的所有屬性
如果你想要将一個對象的所有屬性都作為 prop 傳入,你可以使用不帶參數的
v-bind (取代 v-bind:prop-name)
:
post: { id: 1, title: 'My Journey with Vue'} v-bind:id="post.id" v-bind:>
一個簡單的
props
傳遞:
顯示資訊:{{message}}
let app = new Vue({ el: '#app', data: { message: 'hello' }, components: { 'child-cpn': { templte: '#childCpn', props: ['message'] } }})
在
Vue
中,父子元件的關系
props
向下傳遞,事件向上傳遞。
父元件通過
props
給子元件下發資料,子元件通過事件給父元件發送消息。
props
支援的資料類型:
StringNumberBooleanArrayObjectDateFunctionSymbol
vue :class 動态綁定樣式_前端面試必備的Vue良藥目前計數{{counter}}{{message}}{{message}}web
示例:
Vue.component('my-component',{ props: { // 基礎的類型檢查 propA: Number, // 多個可能的類型 propB: [String, Number], // propC: { type: String, required: true }, // 帶有預設值的數字 propD: { type: Number, default: 100 }, // 帶有預設值的對象 propE: { type: Object, default: function(){ return {message: 'web'} } }, // 自定義驗證函數 propF: { vfunc: function(value) { return value > 1 } } }})
子傳父
代碼:
this.$emit('item-click',item)
props
用于父元件向子元件傳遞資料,還有一種比較常見的是子元件傳遞資料或事件到父元件中。
自定義事件:
在子元件中,通過
$emit()
來觸發事件。在父元件中,通過
v-on
來監聽子元件事件。
自定義事件代碼:
點選次數
點選次數
+1
-1
let app = new Vue({ el: '#app', data: { total: 0 }, methods: { changeTotal(counter) { this.total = counter } }, components: { 'child-cpn': { template: '#childCpn', data(){ return{ counter: 0 } }, methods: { increment(){ this.counter++; this.$emit('increment', this.counter) }, decrement(){ this.counter--; this.$emit('decrement',this.counter) } } } }})
父子元件的通路方式:
$children
父子元件的通路方式:
$children
有時候需要父元件直接通路子元件,子元件直接通路父元件,或者是子元件通路父元件。
父元件通路子元件,使用
$children
或者
$refs
子元件通路父元件,使用
$parent
對于
$children
的通路:
this.$children
是一個數組類型,它包含所有子元件對象。通過周遊,取出所有子元件的
message
狀态。
示例:
// 父元件template
顯示所有子元件資訊
// 子元件
我是子元件1
我是子元件1
// 子元件
我是子元件2
我是子元件2
Vue.component('parent-cpn',{ template: '#parentCpn', methods: { showChildCpn(){ for(let i=0; i console.log(this.$children[i].message) } } }})
父子元件的通路方式:
$parent
父子元件的通路方式:
$parent
子元件中直接通路父元件,可以通過
$parent
雖然可以通過
$parent
來通路父元件,但是盡量不要這樣做子元件應該盡量避免直接通路父元件的資料,因為這樣耦合度太高了。
父子元件的通路方式
$refs
$children
的缺陷:
通過
$children
通路子元件,是一個數組類型,通路其子元件要通過索引值。子元件過多時,需要拿其中一個時,不能确定它的索引值,還可能發生變化。擷取其中一個特定的元件,可以使用
$refs
$refs
的使用:
$refs
和
ref
指令通常一起使用通過
ref
給某個子元件綁定一個特定的
id
通過
this.$refs.id
可以通路到該元件
示例:
通過refs通路子元件show() { console.log(this.$refs.child1.message); console.log(this.$refs.child2.message);}
看看一個
.vue
檔案項目
:
@click="itemClick(index)"
v-for="(item,index) in titles">
{{item}}
export default { name: 'xxx', props: { titles: { type: Array, default() { return [] } } }, data: function() { return { currentIndex: 0 } }, } .xxx { xxx: xxx; }
slot插槽的使用
slot插槽的使用
vue
中的代碼
slot
是什麼呢,它叫插槽,
元素作為元件模闆之中的内容分發插槽,傳入内容後
元素自身将被替換。
v-slot
用法:
預設插槽具名插槽作用域插槽
slot
以及
slot-scope
的用法:子元件編寫,父元件編寫
預設插槽
子元件:
// 子元件
// 預設插槽
預設值
slot
基本使用
在子元件中,使用
可以為子元件開啟一個插槽。該插槽插入什麼内容取決于父元件如何使用。
子元件定義一個插槽:
中的内容表示,如果沒有在該元件中插入任何其他内容,就預設顯示改内容。
示例:
web
我是誰
Vue.component('my-cpn',{ template: '#myCpn'})let app = new Vue({ el: '#app'})
vue :class 動态綁定樣式_前端面試必備的Vue良藥目前計數{{counter}}{{message}}{{message}}web
使用具名插槽
給
slot
元素添加一個
name
屬性
示例:
// 沒有任何内容
// 傳入某個内容
left
left
center
right
1
2
3
Vue.component('my-cpn', { template: '#myCpn' }) let app = new Vue({ el: '#app' })
編譯作用域
Vue
執行個體屬性:
父元件模闆的所有東西都會在父級作用域内編譯,子元件模闆的所有東西都會在子級作用域内編譯。
父元件替換插槽的标簽,但是内容由子元件來提供。
生命周期
生命周期
首先:
new Vue()
,
new
一個
Vue
的執行個體,
Observe data
資料檢視,
init Events
綁定事件,
created
執行
created
方法,判斷是否有
el
屬性,如果沒有,
vm.$mount(el)
表示處于未挂載狀态,可以手動調用這個方法來挂載。判斷是否有
template
屬性。
如果有
el
屬性,判斷是否有
template
屬性。
執行個體化期和加載期 建立期間的生命周期函數:
beforeCreate
和
created
,
beforeMount
和
mounted
。
beforeCreate
在執行個體初始化後,資料觀測
data observer
和
event/watcher
事件配置之前被調用。
更新期
運作期間的生命周期函數:
beforeUpdate
和
updated
created
執行個體已經建立完成後被調用。
執行個體已完成以下的配置:資料觀測
data observer
,屬性和方法的運算,
watch/event
事件回調。
挂載階段還沒開始,
$el
屬性目前不可見。
beforeMount
在挂載開始之前被調用,相關的
render
函數首次被調用。
mounted
,
vm.$el
已經挂載在文檔内,對已有
dom
節點的操作可以在期間進行。
beforeUpdate
資料更新時調用,發生在虛拟
dmo
重新渲染和打更新檔之前。
updated
當這個鈎子被調用時,元件
dom
已經更新,是以你現在可以執行依賴于
dom
的操作。
activated
,
deactivated
,
beforeDestroy
,
destroyed
。執行個體銷毀之前調用,
vue
執行個體銷毀後調用。
解除安裝期
銷毀期間的生命周期函數:
beforeDestroy
和
destroyed
執行個體生命周期鈎子
每個vue執行個體在被建立時都要經過一系列的初始化過程,需要設定資料監聽,編譯模闆,将執行個體挂載到
dom
并在資料變化時更新
dom
等,同時在這個過程中也會運作一些叫做生命周期鈎子的函數。
用于給使用者在不同階段添加自己代碼的機會。
beforeCreate
,此時的
data
是不可見的
data() { return { a: 1 }},beforeCreate() { // red console.log(this.a); // 看不見}
created
執行個體已經建立完成後被調用,這個時候你看不見你頁面的内容,執行個體已完成表示:資料觀測
data observer
,屬性和方法的運算,
watch/event
事件回調。
這個時候挂載階段還沒開始,
$el
屬性目前不可見。
export default { data() { return { a: 1 } }, beforeCreate() { console.log(this.a); }, created() { // red console.log(this.a); console.log(this.$el); // 此時data資料裡面的a可見,this.$el不可見 }}
beforeMount
在挂載開始之前被調用,相關的
render
函數首次被調用。
export default{ data() { return { a: 1 } }, beforeCreate() { console.log(this.a); // 不可見 }, created() { console.log(this.a); console.log(this.$el); // 不可見 }, beforeMount() { console.log(this.$el); // 不可見 }}
mounted
:
export default { data() { return { a: 1 } }, mounted() { console.log(this.$el); // 此時$el 可見 }}
beforeUpdate
鈎子,
dom
更新之前調用:
beforeUpdate() { console.log(this.a);}// document.getElementById("web").innerHTML
updated
鈎子,
dom
更新之後調用:
updated() { console.log(this.a);}// document.getElementById("web").innerHTML
activated
和
deactivated
(元件)
activated() { console.log("元件使用了");},deactivated() { console.log("元件停用了");Data to Drag}
beforeDestroy
和
destroyed
beeforeDestroy
類型為
function
,詳細:執行個體銷毀之前調用,在這一步,執行個體仍然完全可用。
該鈎子在伺服器端渲染期間不被調用。
destroyed
類型為
function
,詳細:
vue
執行個體銷毀後調用,調用後,
vue
執行個體訓示的所有東西都會解綁定,所有的事件監聽器會被移除,所有的子執行個體也會被銷毀。
該鈎子在伺服器端渲染期間不被調用。
beforeRouteEnter
和
beforeRouteLeave
beforeRouteEnter() { console.log('beforeRouteEnter')},beforeRouteLeave() { console.log('beforeRouteLeave')}
vue路由使用的,路由進去和路由離開的時候添加的。
vue :class 動态綁定樣式_前端面試必備的Vue良藥目前計數{{counter}}{{message}}{{message}}web
created() { console.log('開始執行created鈎子函數') // 擷取data資料 console.log('擷取created屬性'+this.value) // 擷取頁面元素 console.log(this.$refs['example']) this.$nextTick(()=>{ console.log('執行created建立的this.$nextTick()函數') })},mounted() { console.log('開始執行mounted鈎子函數') // 擷取挂載資料 console.log('擷取挂載資料--'+this.$refs['example'].innerText) this.$nextTick(()=>{ console.log('執行mounted建立的this.$nextTick()函數') })},methods: { // 更新資料 updateDate(){ }, get(){ this.value='更新data内的value屬性值' // 擷取頁面元素資料 console.log(this.$refs['example').innerText) this.$nextTick(()=>{ console.log(this.$refs['example'].innerText) }) }}
var vm=new Vue({})
表示開始建立一個
Vue
的執行個體對象,
init events&liftcycle
表示剛初始化了一個
vue
空的執行個體對象,這個時候,對象身上,隻有預設的一些生命周期函數和預設事件,其他東西都沒有建立,
beforeCreate
生命周期函數執行的時候,
data
和
methods
中的資料都沒有初始化。在
created
中,
data
和
methods
都已經被初始化好了,如果要調用
methods
中的方法,或者操作
data
中的資料,隻能在
created
中操作。然後
vue
開始編輯模闆,把
vue
代碼中的那些指令進行執行,最終在記憶體中生成一個編譯好的最終模闆字元串,渲染為記憶體中的
dom
,此時隻是在記憶體中,渲染好了模闆,并沒有把模闆挂載到真正的頁面中去。
beforeMount
函數執行的時候,模闆已經在記憶體中編譯好了,但是尚未挂載到頁面中去。
create vm.$el and replace 'el' with it
這一步是将記憶體中編譯好的模闆,真實的替換到浏覽器的頁面中去。
mounted
,隻要執行完了
mounted
,就表示整個
vue
執行個體已經初始化完了。此時,元件從建立階段進入到了運作階段。
beforeUpdate
執行的時候,頁面中顯示的資料還舊的,而
data
資料是最新的,頁面尚未和最新的資料保持同步。
updated
事件執行的時候,頁面和
data
資料已經保持同步了,都是新的。
virtual dom re-render and patch
執行,先根據
data
中最新的資料,在記憶體中,重新渲染出一份最新的記憶體
dom
樹,當最新的記憶體
dom
樹被更新之後,會把最新的記憶體
dom
樹,重新渲染到真實的頁面中,完成資料從
data
到
view
的更新。
beforeDestroy
鈎子函數執行時,
vue
執行個體就從運作階段,進入到了銷毀階段。此時的執行個體還是可用的階段,沒有真正執行銷毀過程。
destroyed
函數執行時,元件已經被完全銷毀了,都不可用了。
❤️ 愛心三連擊
❤️ 愛心三連擊
1.如果覺得這篇文章還不錯,來個分享、點贊、在看三連吧,讓更多的人也看到~
2.關注公衆号超級全棧架構師,領取5000G全棧學習資料,定期為你推送新鮮幹貨好文,每周送書福利,不要錯過喲~
3.掃描下方添加微信,拉你進技術交流群和各大廠的同學一起學習交流成長 ~
vue :class 動态綁定樣式_前端面試必備的Vue良藥目前計數{{counter}}{{message}}{{message}}web
vue :class 動态綁定樣式_前端面試必備的Vue良藥目前計數{{counter}}{{message}}{{message}}web
你點的每個贊,我都認真當成了喜歡