版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
教學(xué)目標(biāo)理解Vue.js指令的定義與分類。掌握條件渲染指令的使用與注意事項(xiàng)。掌握列表渲染指令v-for的多種定義方法及與key屬性配合使用的方法。掌握數(shù)據(jù)綁定的多種方式。掌握事件處理指令及事件修飾符的使用方法。掌握其它內(nèi)置指令的作用與使用方法。掌握Vue自定義指令定義與注冊的方法。1第3章
Vue.js指令(6學(xué)時(shí))教學(xué)目標(biāo)第1章
Vue.js發(fā)展概述(1課時(shí))1.掌握常用的Vue.js開發(fā)工具。2.掌握Vue.js頁面的基本組成。3.學(xué)會(huì)使用Vue.js3.x編寫簡易的單頁面應(yīng)用。4.掌握ECMAScript基礎(chǔ)語法(重點(diǎn))。1.1Vue.js簡介
Vue.js是一套用于構(gòu)建用戶界面的漸進(jìn)式框架。Vue.js被設(shè)計(jì)為可以自底向上逐層應(yīng)用。Vue.js的核心庫只關(guān)注視圖層,不僅易于上手,還便于與第三方庫或既有項(xiàng)目整合。
當(dāng)與現(xiàn)代化的工具鏈以及各種支持類庫結(jié)合使用時(shí),Vue.js可以開發(fā)復(fù)雜的SPA(SinglePageApplication)單頁應(yīng)用項(xiàng)目。
尤雨溪(EvanYou)現(xiàn)任職于紐約GoogleCreativeLab。尤雨溪是Vue.js框架的作者,HTML5版Clear(移動(dòng)應(yīng)用)的打造人。
理想:從想讓自己的工作更有效率,到想自己寫一個(gè)框架。從提供一個(gè)十分簡單專注的工具到將一些DOM和JS對象同步,再到開始擴(kuò)充范圍以及將更多的模塊加入到生態(tài)系統(tǒng),最終形成一個(gè)框架。思政理想還是要有的,萬一實(shí)現(xiàn)呢?三大前端框架:React、Angular、Vue.js(Github中star最多)三大移動(dòng)端框架:Flutter、Weex、ReactNativeVue.js發(fā)展史和特點(diǎn)易用已經(jīng)會(huì)了HTML、CSS、JavaScript即可閱讀指南開始構(gòu)建應(yīng)用靈活不斷繁榮的生態(tài)系統(tǒng),可以在一個(gè)庫和一套完整框架之間自如伸縮。高效20kbmin+gzip的運(yùn)行大小。超快虛擬DOM,最省心的優(yōu)化。Vue1.0,2014.2-2015.10.27Vue2.0,2016.4.27Vue2.6.x,2019.02.05V3.0,2020.9.18Vue發(fā)展簡史Vue特點(diǎn)起源于2013年12月自己的實(shí)驗(yàn)項(xiàng)目1.2Vue.js生產(chǎn)環(huán)境配置Vue.js引入方法<scripttype="text/javascript"src="js/vue.min.js"></script><scriptsrc="/vue@next"></script>安裝VueDevtools1.下載并安裝Node.js和npm2.從GitHub上下載VueDevtools(解壓到vue-devtools-dev)npminstall;npmrunbuild安裝Chorme擴(kuò)展程序(選擇shells/chrome文件夾)Firefox和Edge可以直接瀏覽器安裝devtools拓展程序1.2.1Vue.js引入方法61.2.3Node.js環(huán)境配置
環(huán)境配置主要是為npm配置全局模塊安裝的路徑和緩存cache的路徑。默認(rèn)情況下執(zhí)行:npminstall*-g。
模塊安裝到“C:\Users\用戶名\AppData\Roaming\npm”(會(huì)占用C盤資源)。
為了減輕C盤資源的壓力,建議使用以下方法進(jìn)行優(yōu)化環(huán)境配置。步驟如下:
(1)在指定盤符(設(shè)為F:\nodejs)下新建文件夾node_global和node_cache,用作存放安裝的全局模塊及緩存cache,
(2)在命令行執(zhí)行下列配置設(shè)置命令。npmconfigsetprefix"F:\nodejs\node_global“
npmconfigsetcache"F:\nodejs\node_cache“
安裝node.js(v16.14.x以上)71.2.3環(huán)境配置示意圖(3)設(shè)置環(huán)境變量。右擊“計(jì)算機(jī)”,依次選擇“屬性→高級(jí)系統(tǒng)設(shè)置→高級(jí)→環(huán)境變量”。在系統(tǒng)變量域中,單擊“新建”按鈕,在“編輯系統(tǒng)變量”對話框中設(shè)置變量名為NODE_PATH、變量值為F:\nodejs\node_global\node_modules。
在“Administrator的用戶變量”域中,選擇變量Path后,單擊“編輯”按鈕,將變量值中的C:\Users\Administrator\AppData\Roaming\npm修改為F:\nodejs\node_global。81.2.4創(chuàng)建第一個(gè)Vue單頁程序(1)Vuev2.X<divid="app"><p>{{message}}--{counter}}</p></div><!--JS部分-->
<script>var
vm=newVue({//創(chuàng)建Vue實(shí)例
el:"#app",//定義掛載元素
template:"",//定義模板內(nèi)容選項(xiàng)
data:{//定義數(shù)據(jù)選項(xiàng)
message:"HelloVue!",
counter:0,
},
methods:{//定義方法(函數(shù))
},
});</script>
(2)VueV3.x<divid="app"><p>{{message}}</p><p>計(jì)數(shù)器Counter={{counter}}</p><button@click="add">計(jì)數(shù)器增1</button></div><script>//第1種方法const{createApp}=Vue;//解構(gòu)賦值constApp={//定義JS對象-App組件data(){//data選項(xiàng)為函數(shù),return返回變量
return{
message:"HelloVue!",
counter:0,
}; }, methods:{//定義組件中的方法 },};//創(chuàng)建Vue實(shí)例,并掛載到DOM上
createApp(App).mount("#app");//也可以創(chuàng)建一個(gè)Vue實(shí)例,獲取data中數(shù)據(jù)constinstance=app.mount('#app');案例演示:【例1-1、1-2】1.3Vue.js開發(fā)工具開發(fā)工具VisualStudioCode(VSCode)HBuilderXWebStorm瀏覽器工具M(jìn)SEdge(devtools)Mozilla
Firefox(devtools)GoogleChromeVue調(diào)試工具DevTools問:掌握這些工具就能夠很好地就業(yè)嗎?答:我們還得了解一下目前企業(yè)需求是什么?101.4ECMAScript6.0基礎(chǔ)ECMAScript6.0(以下簡稱ES6)是JavaScript語言的下一代標(biāo)準(zhǔn),已經(jīng)在2015年6月正式發(fā)布了。它的目標(biāo)是使得JavaScript語言可以用來編寫復(fù)雜的大型應(yīng)用程序,成為企業(yè)級(jí)開發(fā)語言。1.4.1let和const//var的情況
console.log(chu);//輸出undefined
var
chu
=
2022;
//let的情況
console.log(bar);//報(bào)錯(cuò)ReferenceError
let
bar
=
2;
const
numberArr=[1,2,3,4,5,6,7]
//賦值numberArr.push(10,20,30);
//可以執(zhí)行console.log(numberArr);
//輸出所有元素numberArr=[15,2,3,4,5,6,7]
//報(bào)錯(cuò),不能重新賦值
注意:ES6新增了let命令,用來聲明變量。它的用法類似于var,但是所聲明的變量,只在let命令所在的代碼塊內(nèi)有效。常量不能重新賦值、不能重復(fù)聲明、不會(huì)被預(yù)解析。常量屬于塊級(jí)作用域。對象常量屬性可以修改,但對象的引用不能修改。否則會(huì)報(bào)錯(cuò)。111.4.2解構(gòu)賦值ES6允許按照一定模式,從數(shù)組和對象中提取值,對變量進(jìn)行賦值。解構(gòu)不成功,變量的值就等于undefined。(1)數(shù)組的解構(gòu)賦值let
[a1,b2,c1]=[100,200,300];//a1=100,b1=200,c1=300
左右兩邊結(jié)構(gòu)必須一樣let
[chu,[[jiu],liang]]=[10,[[20,30],30]];//chu=10,jiu=[20,30],liang=30
let
[,,z]=["chu","jiu","liang"];//z='liang'
let
[x,,y]=[10,20,30]//x=10,y=30,不完全解構(gòu)let
[head,...tail]=[10,20,30,40]//head=10,tail=[20,30,40]
let
[x,y,...z]=['z']//x='z',y=undefined,z=[]
1.4ECMAScript6.0基礎(chǔ)(2)對象的解構(gòu)賦值let
{bar,foo}={foo:'aaa',bar:'bbb'}//bar='bbb',foo='aaa',變量必須與屬性同名才能成功賦值let
{baz}={foo:'aaa',bar:'bbb'}//baz=undefined,解構(gòu)不成功。
(3)解構(gòu)賦允許指定默認(rèn)值let
[foo=true]=[];//foo=true
let
[x,y='b']=['a'];//x='a',y='b'
let
[x,y='b']=['a',undefined];//x='a',y='b'
121.4ECMAScript6.0基礎(chǔ)1.4.3箭頭函數(shù)
(參數(shù))=>{//函數(shù)體,return表達(dá)式}ES6中,箭頭函數(shù)就是函數(shù)的一種簡寫形式,使用括號(hào)包裹參數(shù),跟隨一個(gè)“=>”,緊接著是函數(shù)體。當(dāng)箭頭函數(shù)沒有參數(shù)或者有多個(gè)參數(shù),要用()括起來。當(dāng)箭頭函數(shù)函數(shù)體有多行語句,用{}包裹起來,表示代碼塊,當(dāng)只有一行語句,并且需要返回結(jié)果時(shí),可以省略{},結(jié)果會(huì)自動(dòng)返回。當(dāng)箭頭函數(shù)要返回對象的時(shí)候,為了區(qū)分于代碼塊,要用()將對象包裹起來。var
fun=num=>num;
//與第2~4行等價(jià)var
fun=function(num){
return
num;
}
var
fn=()=>5
//與第6行等價(jià)var
fn=function(){return
5}
var
sum=(num1,num2)=>num1+num2
//與第8~11行等價(jià)var
sum=function(num1,num2){
//普通函數(shù)console.log(this)//指向Window對象
return
num1+num2
}
Console.log(sum(100,200));//顯示300varfun=(id,name)=>({id:id,name:name});//返回對象時(shí),使用()包裹對象注意:箭頭函數(shù)里面沒有this對象,此時(shí)的this是外層的this對象,即Window。普通函數(shù)中的this指向Window對象。箭頭函數(shù)中的this指的是函數(shù)定義位置的上下文。箭頭函數(shù)體中的this對象,是定義函數(shù)時(shí)的對象,而不是使用函數(shù)時(shí)的對象。131.4.4展開運(yùn)算符
展開運(yùn)算符(...)用于取出參數(shù)對象所有可遍歷屬性,然后拷貝到當(dāng)前對象。//拷貝對象(深拷貝)
let
preson1
=
{
name:
"chujiuliang",
age:
57
}
let
obj1=
{
...preson1
}
//拷貝console.log(obj1)//{
name:
"chujiuliang",
age:
57
}
//合并對象
let
age
=
{
age:
22
}
let
name
=
{
name:
"liming"
}
let
person2
=
{}
person2
=
{
...age,
...name
}
console.log(person2
)
//{age:
22,
name:
"liming"}
//如果person2中原本有name,age屬性會(huì)被覆蓋
1.4.5模板字符串
模板字符串相當(dāng)于加強(qiáng)版的字符串,用反引號(hào)“`”,除了作為普通字符串,還可以用來定義多行字符串,也可以在字符串中加入變量和表達(dá)式。1.4ECMAScript6.0基礎(chǔ)多行字符串
let
string1
=
`Vue.js,
isveryeasytolearn!`
console.log(string1)//
Vue.
js,
//
isveryeasytolearn!字符串插入變量和表達(dá)式。變量名寫在${}中,${}中可以放入JavaScript表達(dá)式。let
name
=
"Chujiuliang"
let
age
=
57
let
info
=
`My
Name
is
${name},I
am
${age+1}
years
old
next
year.`
console.log(info)
//
My
Name
is
Chujiuliang,I
am
58
years
old
next
year.
字符串中調(diào)用函數(shù)function
fun(){
return
"ChuJiuLiang!"
}
let
string2
=
`Welcomto${fun()}`
console.log(string2);
//
WelcomtoChuJiuLiang!
Vue.js開發(fā)就業(yè)前景Web前端開發(fā)人才需求量大,供不應(yīng)求,薪酬高,待遇好,就業(yè)前景寬廣!
這么好的機(jī)會(huì),還等啥?努力學(xué)習(xí)吧!本章小結(jié)本章主要介紹了Vue.js由來及如何配置Vue.js生產(chǎn)環(huán)境的方法。對Vue3.x新特性進(jìn)行講解。詳細(xì)講解了Vue.js引入方法及devtools調(diào)試工具的使用方法。結(jié)合2個(gè)Vue版本,詳細(xì)介紹Vue實(shí)例創(chuàng)建方法、App組件定義及組件內(nèi)的el、data、methods等常用的選項(xiàng)。對常用的Vue.js開發(fā)工具進(jìn)行了介紹,主要對業(yè)界主流的VSCode、HBuilderX進(jìn)行介紹,在實(shí)際開發(fā)過程中,可以根據(jù)實(shí)際工程的需要和個(gè)人喜愛去選擇合適的開發(fā)工具。最后介紹ECMAScript6的一些基礎(chǔ)知識(shí)。主要包括let和const、解構(gòu)賦值、箭頭函數(shù)、展開運(yùn)算符和模板字符串等方面的基礎(chǔ)知識(shí),為后期項(xiàng)目的開發(fā)提供基礎(chǔ)條件。思考與拓展總結(jié)與提高教學(xué)目標(biāo)第2章
Vue.js基礎(chǔ)(5課時(shí))1.理解MVVM模式的工作機(jī)制2.掌握多種類型數(shù)據(jù)綁定的方法3.掌握計(jì)算屬性與方法在使用上的區(qū)別(重點(diǎn))4.學(xué)會(huì)使用偵聽屬性處理數(shù)據(jù)變化的相關(guān)事務(wù)5.理解生命周期鉤子函數(shù)在使用上的差異性6.學(xué)會(huì)定義及使用數(shù)據(jù)對象7.掌握數(shù)據(jù)中數(shù)組對象的變異與非變異方法(難點(diǎn))2.1MVVM模式
MVVM是Model-View-ViewModel的簡寫,它是一種基于前端開發(fā)的架構(gòu)模式,其核心是提供對View和ViewModel的雙向數(shù)據(jù)綁定,這使得ViewModel的狀態(tài)改變可以自動(dòng)傳遞給View,即所謂的數(shù)據(jù)雙向綁定。Angular、React、Vue.js三大主流MVVM框架
在MVVM架構(gòu)下,View和Model之間并沒有直接的聯(lián)系,而是通過ViewModel進(jìn)行交互,Model和ViewModel之間的交互是雙向的,因此View數(shù)據(jù)的變化會(huì)同步到Model中,而Model數(shù)據(jù)的變化也會(huì)立即反映到View上。ViewModel通過雙向數(shù)據(jù)綁定把View層和Model層連接了起來,而View和Model之間的同步工作完全是自動(dòng)的,無需人為干涉。
因此開發(fā)者只需關(guān)注業(yè)務(wù)邏輯,不需要手動(dòng)操作DOM,不需要關(guān)注數(shù)據(jù)狀態(tài)的同步問題,復(fù)雜的數(shù)據(jù)狀態(tài)維護(hù)完全由MVVM來統(tǒng)一管理。
2.1.2MVVM模式的前端框架發(fā)展趨勢從/@angular/core-vs-angular-vs-react-vs-vue網(wǎng)站上可以查看下載量和使用狀態(tài)等數(shù)據(jù),其下載量和狀態(tài)對比結(jié)果如下圖所示。2.1.3MVVM模式的應(yīng)用(1)
<!--定義View
-->
<div
id="app">
<h3>教材列表</h3>
<ol>
<li
v-for="book
in
books">{{book.bookName}}</li>
</ol>
</div>
案例演示:【例2-1】MVVM模式的應(yīng)用
<script>
//定義JS數(shù)組對象Model,并作為組件內(nèi)data選項(xiàng)中的books的引用值
var
myModel
=
[
{
bookName:
"Web前端開發(fā)技術(shù)"
},
{
bookName:
"JSP程序設(shè)計(jì)"
},
{
bookName:
"計(jì)算機(jī)網(wǎng)絡(luò)"
},
];
//
創(chuàng)建Vue實(shí)例app,也稱為ViewModel,用來連接View與Model
const
app
=
Vue.createApp({
//
定義data選項(xiàng)
data()
{
return
{
books:
myModel,
//
引用JS數(shù)組對象
};
},
});
app.mount("#app");
//
掛載到DOM上
</script>
2.1.3MVVM模式的應(yīng)用(2)案例演示:【例2-2】數(shù)據(jù)雙向綁定與MVVM模式解析<div
id="app">
<fieldset>
<legend>圖書信息</legend>
圖書名稱:<input
type="text"
v-model="bookName"
placeholder="輸入圖書名稱"><br
/>
出版社:<input
type="text"
v-model="press"
placeholder="輸入出版社"><br
/>
定價(jià):<input
type="number"
v-model="price"
placeholder="輸入定價(jià)"><br
/><br
/>
<input
type="submit"
value="提交">
<input
type="reset"
value="重置">
<p>圖書名稱:{{bookName}}、出版社:{{press}}、定價(jià):{{price}}</p>
</div>
<script
type="text/javascript">
const
app
=
Vue.createApp({
//
Vue實(shí)例app
data()
{
return
{
bookName:
'Vue.js前端框架技術(shù)與實(shí)戰(zhàn)',
//給定初始值,視圖同步變化
press:
'',
//為空串
price:
0.0
//為0
}
}
});
app.mount('#app');
//
掛載到DOM上
</script>
2.2數(shù)據(jù)綁定與插值Vue.js中插值分為文本、HTML代碼、屬性、JavaScript表達(dá)式等多種形式。文本插值:<p>我的姓名是{{myName}}。</p>HTML代碼:
<p>v-html指令:<spanv-html="htmlCode"></span></p>屬性插值:<av-bind:href="url"v-bind:title="title">中國教育和科研計(jì)算機(jī)網(wǎng)</a>JavaScript表達(dá)式插值:<標(biāo)記名稱>{{JS合法表達(dá)式}}</標(biāo)記名稱><標(biāo)記名稱>{{5+5*3}}</標(biāo)記名稱><標(biāo)記名稱>{{Math.pow(x,2)+5}}</標(biāo)記名稱><標(biāo)記名稱>{{yesNo?'確定':'取消'}}</標(biāo)記名稱><標(biāo)記名稱>{{message.split('').reverse().join('')}}</標(biāo)記名稱>數(shù)據(jù)綁定最常見的形式就是使用“Mustache”語法:{{}}。案例演示:【例2-3】插值的綜合應(yīng)用2.3計(jì)算屬性與方法問題導(dǎo)入:當(dāng)模板中插入過多的業(yè)務(wù)邏輯,會(huì)使模板過重且后期難以維護(hù)。<divid='app'>{{information}}--{{information.split('').reverse().join('')}}</div>基本語法//在Vue實(shí)例vm中定義選項(xiàng)computedcomputed:{
businessHandler(){//業(yè)務(wù)邏輯處理代碼returninformation.split('').reverse().join('');
}
【例2-4】計(jì)算屬性的應(yīng)用場景(
vue-2-4.html)。
要求:使用計(jì)算屬性定義maxNumber、minNumber等函數(shù)實(shí)現(xiàn)從給定數(shù)組中找出最大數(shù)和最小數(shù)。2.3.1計(jì)算屬性基礎(chǔ)應(yīng)用解決方案:采用計(jì)算屬性(computed)來處理一些復(fù)雜邏輯時(shí)非常有用。計(jì)算屬性定義為函數(shù)形式,在一個(gè)計(jì)算屬性里可以完成各種復(fù)雜的邏輯,包括運(yùn)算、函數(shù)調(diào)用等,最終返回一個(gè)結(jié)果就可以。2.3.1計(jì)算屬性基礎(chǔ)應(yīng)用
設(shè)計(jì)要求:(1)使用計(jì)算屬性定義maxNumber函數(shù),找出數(shù)組中最大數(shù);(2)使用方法定義minNumber函數(shù),找出數(shù)組中最小數(shù)。比較計(jì)算屬性和方法的差異性。Methods配置選項(xiàng):
methods:{
findMaxNumber(){
this.maxNumber=Math.max(...this.numberArr)
}
},計(jì)算屬性緩存與方法比較計(jì)算屬性和方法區(qū)別:(1)可以將同一函數(shù)定義為一個(gè)方法(而不是計(jì)算屬性)。兩種方式的最終結(jié)果確實(shí)是完全相同的。然而,不同的是計(jì)算屬性是基于它們的響應(yīng)式依賴進(jìn)行緩存的。只在相關(guān)響應(yīng)式依賴發(fā)生改變時(shí)它們才會(huì)重新求值。computed是局部渲染,而methods是全部渲染。(2)methods必須需要一定的條件去觸發(fā),而computed則不需要,實(shí)時(shí)響應(yīng)。(3)computed依賴緩存,如果不需要經(jīng)常變動(dòng)時(shí),可使用computed;需要經(jīng)常變動(dòng)時(shí),可使用methods。如果需要傳參數(shù),就用methods。252.3.2計(jì)算屬性的setter和gettercomputed屬性默認(rèn)只有g(shù)etter,但Vue允許設(shè)計(jì)人員在需要時(shí)可以為其提供一個(gè)setter。
在computed選項(xiàng)下設(shè)置setter,頁面信息會(huì)立即渲染,并完成更新工作。如果使用methods選項(xiàng),并為其定義相同的方法set(),只有調(diào)用時(shí)才能完成更新工作。//在Vue實(shí)例vm對象中定義
computed:{
myObject:{//myObject定義為對象
set:function(newValue){//對新值進(jìn)行相關(guān)業(yè)務(wù)邏輯處理 },
get:function(){return相關(guān)參數(shù)(表達(dá)式);}}}定義setter時(shí),需要定義成帶參數(shù)的set,參數(shù)為newValue,其值為字符串,渲染時(shí)可從中提取相關(guān)信息即可。必須在computed屬性下,必須定義一個(gè)對象,如myObject,用于包裹set和get函數(shù)。然后通過賦值語句(或在調(diào)試狀態(tài)下)給myObject賦值,實(shí)現(xiàn)數(shù)據(jù)的變化。案例演示:【例2-5】計(jì)算屬性的setter和getter屬性應(yīng)用實(shí)戰(zhàn)-更新圖書/定價(jià)信息26更新圖書/定價(jià)信息<div
id="app">
<p
v-once>初始信息:圖書名稱/定價(jià):{{bookName}}/{{price}}元</p>
<h4>computed設(shè)置后立即更新:</h4>
<p>圖書名稱/定價(jià):{{bookName}}/{{price}}元</p>
<button
type="button"
v-on:click="set()">set方法更新</button>
<p>圖書名稱/定價(jià):{{bookName}}/{{price}}元</p>
<p
v-once>初始圖書名稱/定價(jià):{{myBooks}}元</p>
<p>更新后圖書名稱/定價(jià):{{myBooks}}元</p>
</div>
<script
type="text/javascript">
const
App
=
{
data()
{
return
{
bookName:
"Web前端開發(fā)技術(shù)",
price:
59.5,
};
},
computed:
{
myBooks:
{
set:
function
(newValue)
{
//
重新設(shè)置
var
newBook
=
newValue.split("
");
this.bookName
=
newBook[0];
this.price
=
newBook[newBook.length
-
1];
},
get:
function
()
{
//
取志愿
return
this.bookName
+
"/"
+
this.price;
},
},
},
methods:
{
set:
function
()
{
//
通過方法來賦值
this.bookName
=
"Vue.js前端框架技術(shù)與實(shí)戰(zhàn)";
this.price
=
69.8;
},
},
};
Vue.createApp(App).mount("#app");
</script>
2.4偵聽屬性watch-1問題導(dǎo)入:有時(shí)需要在數(shù)據(jù)發(fā)生變化時(shí),執(zhí)行一些特定的指令操作,該如何處理呢?解決方案:Vue提供更通用的方法,通過watch選項(xiàng)來響應(yīng)數(shù)據(jù)的變化。watch可以為實(shí)例添加被觀察的對象,并在對象被修改時(shí)調(diào)用設(shè)計(jì)人員自定義的方法。watch可以觀察簡單變量、數(shù)組和對象變化,但使用方法略有不同。2.4.1watch屬性基本用法
在watch選項(xiàng)中,需要將變量changeValue定義為函數(shù)變量,參數(shù)分別為newValue、oldValue。其中newValue是變化后的值,oldValue為變化之前的值。//HTML部分<p>需要偵聽的綁定數(shù)據(jù)變量:{{changeValue}}</p>//在JS部分,Vue組件中定義
watch:{changeValue(newValue,
oldValue){//偵聽數(shù)據(jù)變化需要處理的業(yè)務(wù)邏輯代碼} }//通過實(shí)例修改data中的數(shù)據(jù)constinstance=Vue.createApp(App).mount("#app");instance.changeValue=5000;//立即觸發(fā)偵聽案例演示:【例2-6】微信零錢變更動(dòng)項(xiàng)目實(shí)戰(zhàn)28【例2-6】微信零錢變更動(dòng)項(xiàng)目實(shí)戰(zhàn)
<div
id="app">
<h3>微信錢包變更通知</h3>
<p>微信帳號(hào):202208200111199</p>
<p
v-once>零錢:{{change}}</p>
消費(fèi)支付:<input
type="text"
name=""
id=""
v-model="money"
/>
<button
type="button"
v-on:click="changeMoney()">支付{{money}}元</button>
<p
style="font-size:
22px">
<img
src="wxlq.jpg"
/>消費(fèi)后零錢:{{change}}元
</p>
<h3>以下是消費(fèi)明細(xì)帳</h3>
<hr
/>
</div>
<div
id="detail"></div>
<script
type="text/javascript">
const
App
=
{
data()
{
return
{
change:
50000,
money:
300,
loop:
0,
};
},
watch:
{
change(newValue,
oldValue)
{
alert("零錢由
:"
+
oldValue
+
"
變?yōu)?/p>
"
+
newValue
+
"元!");
//
告警輸出前后值
},
},
methods:
{
changeMoney()
{
this.loop
=
this.loop
+
1;
//
統(tǒng)計(jì)次數(shù)
this.change
=
this.change
-
this.money;
//
變更零錢
this.writeDetail();
//
計(jì)入明細(xì)帳
},
getElemet(id)
{
return
document.getElementById(id);
//
返回指定id的元素
},
writeDetail()
{
this.getElemet("detail").innerHTML
+=
"<p>第"
+
this.loop
+"次,
消費(fèi)"
+
this.money
+
"元,零錢為¥:"
+
this.change
+
"元</p>";
//
生成明細(xì)帳
},
},
};
constinstance=Vue.createApp(App).mount("#app");
instance.change=35000;//立即觸發(fā)偵聽
</script>2.4.2watch屬性高級(jí)用法
通常情況下,watch屬性并不關(guān)心第一次綁定的數(shù)據(jù),也不會(huì)執(zhí)行監(jiān)聽函數(shù)。只有數(shù)據(jù)發(fā)生改變才會(huì)執(zhí)行。
如果需要在最初綁定值時(shí)就能執(zhí)行函數(shù),則就需要使用handler方法和immediate屬性,并將immediate:true。如果還需要嘗試偵聽數(shù)據(jù)的變化,還需要設(shè)置deep:true。deep:
false(默認(rèn)值),表示不進(jìn)行深度監(jiān)聽;true時(shí),表深度偵聽。任何修改changeValue里面任何一個(gè)屬性都會(huì)觸發(fā)這個(gè)監(jiān)聽器里的handler。
注意:watch深度監(jiān)聽對象或數(shù)組的變化,在變更(不是替換)對象或數(shù)組時(shí),舊值將與新值相同。//HTML部分<p>需要偵聽的綁定數(shù)據(jù)變量:{{changeValue}}</p>//在JS部分//Vue實(shí)例watch選項(xiàng)中定義
watch:{changeValue:{handler(newValue,oldValue){//處理代碼},deep:true,//深度偵聽
immediate:true//立即先去執(zhí)行handler方法}}constinstance=Vue.createApp(App).mount("#app");//定義實(shí)例instance.tuition=5000;//基礎(chǔ)數(shù)據(jù)類型-數(shù)值="張曉娟";//基礎(chǔ)數(shù)據(jù)類型-字符串//控制臺(tái)修改方法instance.$data.tuition=4500案例演示:【例2-7】watch屬性的高級(jí)應(yīng)用2.5生命周期鉤子函數(shù)2.5.1生命周期鉤子函數(shù)作用
//在Vue實(shí)例中定義以下選項(xiàng)beforeCreate:function(){}created:function(){}beforeMount:function(){}mounted:function(){}beforeUpdate:function(){}updated:function(){}beforeUnmount:function(){}unmounted:function(){}renderTriggered(event){}//虛擬DOM被觸發(fā)渲染時(shí)調(diào)用renderTracked(event){}//虛擬DOM重新渲染時(shí)調(diào)用
2.5.1-Vue生命周期流程圖-2-5.png案例演示:【例2-8】生命周期鉤子函數(shù)綜合應(yīng)用
beforeCreate()
{
console.log("子組件創(chuàng)建前...");
},
created()
{
console.log("子組件創(chuàng)建啦!");
},
beforeMount()
{console.log("子組件掛載前...");
},
mounted()
{
console.log("子組件掛載啦!");
},
beforeUpdate()
{
console.log("子組件更新前...");
},
updated()
{
console.log("子組件掛載啦!");
},
beforeUnmount(){
console.log("子組件卸載前...");
},
unmounted(){
console.log("子組件卸載啦!");
},
2.6Vue中數(shù)組變動(dòng)更新問題導(dǎo)入:當(dāng)數(shù)組元素發(fā)生變化時(shí),需要及時(shí)渲染到頁面上去,但不是所有方法都能夠觸發(fā)視圖更新的。constinstance=Vue.createApp(App).mount('#app');instance.items[indexOfItem]=newValue//利用索引賦值instance.items.length=newLength//直接修改數(shù)組的長度Vue.js針對這兩個(gè)問題給出了相應(yīng)的解決辦法,使用這些方法,可以觸發(fā)狀態(tài)更新。使用Vue全局方法Vue.set()或者使用instance.$set()實(shí)例方法。參見“2.7.2Vue實(shí)例屬性與方法”小節(jié)。使用數(shù)組變異方法。例如push()、unshift()、splice()、pop()、shift()、sort()、reverse()。使用非變異方法。例如filter()、concat()、slice()。constinstance=Vue.createApp(App).mount('#app'); letnewItems=instance.items.slice(1,3)案例演示:【例2-9】數(shù)組元素更新方法的應(yīng)用2.7控制臺(tái)console對象2.7.1顯示信息的命令
顯示信息的命令console.log("HelloWorld");("這是info");console.debug("這是debug");//只有顯示級(jí)別為verbose時(shí)才顯示信息console.warn("這是warn");console.error("這是error");【語法說明】console.log():用來顯示信息。():顯示一般信息;console.debug():與consol
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度新能源汽車采購合同補(bǔ)充協(xié)議范本3篇
- 新課標(biāo)背景下初中歷史教師專業(yè)發(fā)展策略研究
- 買賣雙方違約責(zé)任具體規(guī)定協(xié)議版B版
- 基于DEA模型的XT公司融資效率評價(jià)研究
- 線葉旋覆花中橋連三環(huán)倍半萜化合物的生物合成研究
- 樂器租賃協(xié)議示例文本(2024年版)版B版
- 二零二五年度農(nóng)業(yè)科技園區(qū)試驗(yàn)田租賃協(xié)議3篇
- 2025年全球及中國稀土激光器行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國工業(yè)用智能云臺(tái)攝像機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球有膠雙面撓性覆銅板行業(yè)調(diào)研及趨勢分析報(bào)告
- 鋼結(jié)構(gòu)施工管理培訓(xùn)課件
- 2024年度工程建設(shè)項(xiàng)目安全評價(jià)合同2篇
- 《飛機(jī)操縱面》課件
- 商業(yè)咨詢報(bào)告范文大全
- 自我發(fā)展與團(tuán)隊(duì)管理課件
- 《婦產(chǎn)科學(xué)》課件-17.盆腔器官脫垂
- 監(jiān)理報(bào)告范本
- 店鋪交割合同范例
- 大型活動(dòng)LED屏幕安全應(yīng)急預(yù)案
- 2024年內(nèi)蒙古包頭市中考道德與法治試卷
- 湖南省長沙市2024-2025學(xué)年高二上學(xué)期期中考試地理試卷(含答案)
評論
0/150
提交評論