引用
<script src="https://unpkg.com/vue@next"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>demo1</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="app"></div>
</body>
<script>
Vue.createApp({ //創建一個Vue實例,簡單理解就說,我要使用Vue了
template:'<div>Hello world</div>'
}).mount('#app') //這個模板需要放一個位置,也就是說掛載,掛載到`id=app`的DOM上
</script>
</html>
創建應用app和掛載
//創建
const app=Vue.createApp({})
//掛載到DOM
const vm = app.mount("#app")
或者
Vue.createApp({
...
}).mount('#app')
生命周期函數
生命周期函數,生命周期函數你可以這樣理解,就是在** 在某一時刻會自動執行的函數 **,這句話你可以注意兩個關鍵詞:
(1)某一時刻
(2)自動執行
Vue3中有八個生命周期函數,
beforeCreate( ) :在實例生成之前會自動執行的函數
created( ) : 在實例生成之后會自動執行的函數
beforeMount( ) : 在模板渲染完成之前執行的函數
mounted( ) : 在模板渲染完成之后執行的函數
beforeUpdate :當data中的數據變化時, 會立即自動執行的函數
updated:當data中的數據發生變化,頁面重新渲染完后,會自動執行的函數
beforeUnmount( ) :當Vue應用失效時,會自動執行的函數
unmounted() : 當Vue應用失效時,且DOM完全銷毀之后,會自動執行
這樣就有四個關鍵節點了:創建、渲染、更新、銷毀。最主要的理解是他們是自動執行的函數
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>demo7</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="app"></div>
</body>
<script>
//生命周期函數,生命周期函數你可以這樣理解,就是在** 在某一時刻會自動執行的函數 **,這句話你可以注意兩個關鍵詞某一時刻和自動執行
//beforeCreate( ) :在實例生成之前會自動執行的函數
//created( ) : 在實例生成之后會自動執行的函數
//beforeMount( ) : 在模板渲染完成之前執行的函數
//mounted( ) : 在模板渲染完成之后執行的函數
//beforeUpdate :當data中的數據變化時, 會立即自動執行的函數
//updated:當data中的數據發生變化,頁面重新渲染完后,會自動執行的函數
//beforeUnmount( ) :當Vue應用失效時,會自動執行的函數
//unmounted() : 當Vue應用失效時,且DOM完全銷毀之后,會自動執行
const app=Vue.createApp({
data() {
return {
message: 'com'
}
},
methods: {
handleItemClick() {
this.message=this.message=='one'?'two':'one'
}
},
beforeCreate() {
console.log('在實例生成之前會自動執行的函數:beforeCreate')
},
created() {
console.log('在實例生成之后會自動執行的函數:created')
},
beforeMount() {
console.log('在模板渲染完成之前執行的函數:beforeMount')
},
mounted() {
console.log('在模板渲染完成之后執行的函數:mounted')
},
beforeUpdate() {
console.log('當data中的數據變化時, 會立即自動執行的函數:beforeUpdate')
},
updated() {
console.log('當data中的數據發生變化,頁面重新渲染完后,會自動執行的函數:updated')
},
beforeUnmount() {
console.log('當Vue應用失效時,會自動執行的函數:beforeUnmount')
},
unmounted() {
console.log('當Vue應用失效時,且DOM完全銷毀之后,會自動執行:unmounted')
},
template: `<h2 v-on:click="handleItemClick">{{message}}</h2>`
})
const vm = app.mount("#app")
console.log(vm)
</script>
</html>
插值表達式和v-bind綁定數據
插值表達式就是經常看到的{{xxxx}}這樣的東西
插值表達式輸出html標簽:v-html
return {
message: '<i>jspang.com</i>'
}
...
template: `<h2 v-html="message"> </h2>`
[ 插值表達式只作一次渲染-v-once]
只有在第一次渲染去data中的值,而以后不再跟隨data變化,這時候就要用到v-once指令。
<script>
const app = Vue.createApp({
data() {
return {
message: '<i>jspang.com</i>'
}
},
methods: {
handleItemClick() {
this.message = this.message == 'jspang.com' ? "技術胖" : "jspang.com"
}
},
template:`<h2
v-on:click="handleItemClick"
v-html="message"
v-once
></h2>`
})
const vm = app.mount("#app")
</script>
插值表達式中是可以使用JS表達式的,最常用的表達式是三元運算符
<div>{{count>2?'大':'小'}}</div>
也可以這樣:
<div>{{'jspang'+'.com'}}</div>
<div>{{1+2}}</div>
v-bind使用
現在我們給h2標簽加入一個title屬性,屬性的值也想使用message
<h2
v-on:click="handleItemClick"
v-html="message"
v-once
title="message"
> </h2>`
這時候瀏覽器中鼠標放上時顯示的確實message這個單詞,而并沒有出現我們想要的結果。這時候就可以使用v-bind標簽了。寫成下面的樣式就可以了
v-bind:title="message"
v-bind的簡寫方式:
<h2 v-bind:title="message">{{message}}</h2>
<h2 :title="message">{{message}}</h2>
v-on基本用法
methods:{
hanldClick(){
alert('歡迎光臨紅浪漫')
}
},
template:`
<h2 v-on:click="hanldClick">{{message}}</h2>
`
v-on還有一個簡寫方法,就是可以不屑v-on:用@代替,
template:`
<h2 @click="hanldClick">{{message}}</h2>
`
模板動態參數
這里v-bind:title中的title是來自data中的,就可以這樣寫。
const app=Vue.createApp({
data(){
return{
message:'jspang.com' ,
name:'title'
}
},
//.........
template:`
<h2
@click="hanldClick"
:[name]="message"
>
{{message}}
</h2>
`
})
可以看到我們在data中,定義了一個name的變量,值是一個字符串,然后在綁定屬性時我們使用了[]方括號加上data中變量名的形式。這時候綁定的屬性就變的靈活了,這種形式就是模板動態參數,也稱為動態屬性。
可以在瀏覽器中使用檢查的方式,查看此時綁定屬性的名稱,如果進行修改,比如改成title1,瀏覽器中也會跟隨改變,形成動態效果,這就是動態屬性了
return{
message:'jspang.com' ,
name:'title',
event:'click'
}
template:`
<h2
@[event]="hanldClick"
:[name]="message"
>
{{message}}
</h2>
`
這時候就實現了動態綁定方法,可以打開瀏覽器,看一下效果。當點擊<h2>標簽時,也會彈出對應的alert效果。當然你還可以幫click改成其他相應事件,比如改成event:'mouseenter',這樣,當鼠標滑入時就可以相應彈出效果了。
阻止默認事件
最常見的默認事件就是表單的默認提交事件,比如我們這里寫一個表單,然后寫一個屬性為submit的按鈕,當點擊按鈕時,表單就會默認提交到對應的網址。
<form action="https://baidu.com">
<button type="submit">默認提交</button>
</form>
這時候在瀏覽器中預覽,點擊“默認提交”按鈕,就會立即跳轉到百度上去,這就是默認響應事件。但是在開發中我們經常需要阻止這種默認響應事件。比如寫出下面的代碼。
methods:{
hanldeClick(){
alert('歡迎光臨紅浪漫')
},
hanldeButton(e){
e.preventDefault() //阻止默認事件
}
},
//...
template:`
//....
<form action="https://baidu.com" @click="hanldeButton">
<button type="submit">默認提交</button>
</form>
`
或者 使用prevent修飾符
<form
action="https://jspang.com"
@click.prevent="hanldeButton">
<button type="submit">默認提交</button>
</form>
`
methods中的寫法
hanldeButton(){
alert('jspang.com')
}
這樣就可以阻止默認事件,直接響應對應事件的內容了。prevent就是阻止默認事件的修飾符。修飾符可以見簡化一些代碼的編寫,也是比較常用的一個操作。
v-if判斷
<h2 v-if="message=='com'" class="one" > {{message}} </h2>
template: `
<h2 v-if="message=='com'" class="one" > {{message}} </h2>
<h2 v-else class="three"> {{message}} </h2>
`
計算屬性computed
計算屬性的特性是:當計算屬性依賴的內容發生變更時,才會重新執行計算
data(){
return{
message:'jspang.com' ,
price:10,
count:2
}
},
template:` <h2> {{price * count}}</h2>`
寫一個getTotal的方法。
methods:{
getTotal(){
return this.price * (this.count++);
}
},
template:` <h2> {{getTotal()}}</h2>`
methods無法滿足計算需求
比如:
methods:{
getTotal(){
return Date.now()
}
},
這時候打開瀏覽器的控制臺console,然后在里邊通過手都的方式修改message的值vm.message='1111'。這時候問題產生了,你會發現getTotal( )方法被重新執行了。這就是這個問題的所在,這個問題其實可以用今天的主角coumputed計算屬性來解決。
編寫計算屬性
computed:{
total(){
return Date.now()
}
},
template:`
<h2>{{message}}</h2>
<h2> {{total}}</h2>
`
這時候到瀏覽器中,用手動的方法,修改message的值,total的值就不會進行改變了。
vm.message='1111'
通過這個例子,你會對普通方法和計算屬性的區別有所了解。這時候我們作一下總結:
(1)方法methods:只要頁面重新渲染,就會重新執行方法
(2)計算屬性computed: 當計算屬性依賴的內容發生變更時,才會重新執行計算
完整例子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Demo12-Vue中的計算屬性</title>
<script src="https://unpkg.com/vue@next" ></script>
</head>
<body>
<div id="app"></div>
</body>
<script>
const app=Vue.createApp({
data(){
return{
message:'jspang.com' ,
price:10,
count:2
}
},
methods:{
getTotal(){
return Date.now()
},
addCount(){
this.count++
}
},
computed:{ //計算屬性
total(){
return this.price * this.count
}
},
template:`
<h2> {{message}}</h2>
<h2> {{getTotal()}}</h2>
<h2> {{total}}</h2>
<button @click="addCount">再買一個</button>
`
})
const vm=app.mount("#app")
</script>
</html>
watch偵聽器
watch偵聽器的作用就是偵聽一個data中的值的變化,變化后可以寫一個方法,讓其進行一些操作(業務邏輯的編寫)。
data(){
return{
...
count:2
}
}
...
watch:{
count(){ //監聽data中的count值變化
console.log('count changed')
}
},
偵聽器中的方法還可以接收兩個參數,一個是現在的值(current),一個是變化之前的值(prev)。我們分別接收這兩個值,并打印在控制臺,看一下效果。
watch:{
count(current,prev){
console.log('watch changed')
console.log('現在的值:',current)
console.log('變化前的值:',prev)
}
}
監聽器watch和計算屬性computed的區別
計算屬性computed必須要返回一個值,而且在頁面渲染的同時就會執行里邊的業務邏輯,也就是會先執行一遍你寫的業務邏輯,而watch只有發生變化時才會執行,也就是說值沒有變化,它是不執行里邊業務邏輯的。
method,watch,computed三者優先級
現在總結一下method、watch和computed三者如果都能實現相同的功能,它們之間的取舍和使用優先級。
(1)computed 和 method都能實現的功能,建議使用computed,因為有緩存,不用渲染頁面就刷新。
(2)computed 和 watch 都能實現的功能,建議使用 computed,因為更加簡潔。
模板樣式綁定
data(){
return {
classString:'red',
}
},
template:`
<h2 :class="classString">JSPang.com</h2> //綁定同樣使用v-bind,你也可以使用簡寫:
`
....
//定義三個樣式
<style>
.red{color:red;}
.green{color:green;}
.background{ background-color: orange;}
</style>
對象的綁定方式
data(){
return {
classString:'red',
classObject:{red:true,background:true}
}
},
...
template:`
<h2 :class="classObject">JSPang.com</h2>
`
這時候再到瀏覽器中查看效果,就會有兩個樣式被綁定了red和background。如果你這首把red改為false,那效果就是只有背景顏色,沒有字體顏色了。
數組的綁定方式
data(){
return {
classString:'red',
classObject:{red:true,background:true},
classArray:['green','background'],
}
},
...
template:`
<h2 :class="classArray">JSPang.com</h2>
`
行內樣式綁定
const app=Vue.createApp({
data(){
return {
styleString:'color:orange;',
styleObject:{
color:'red',
background:'yellow'
}
}
},
template:`
<h2 :style="styleObject">JSPang.com</h2>
`
})
const vm=app.mount("#app")
v-if和v-show區別
data(){
return{
show:true,
}
},
template:`
<h2 v-show="show">JSPang.com</h2>
`
這時候打開瀏覽器進行預覽,是可以看到JSPang.com這個h2的DOM元素的。如果把數據項show改成false就看不到了。
v-if更加靈活,可以增加多個判斷,比如v-else-iif和else,而v-show不具備這樣的靈活性。
v-show控制DOM元素顯示,其實控制的是css樣式,也就是display:noe。現在你可以把data的值修改為false,然后刷新瀏覽器,打開瀏覽器調試器的Elements選項卡,就可以清楚的看到,這時候<h2>標簽上的style樣式就是display:none。
v-for循環
v-for循環數組方法
const app=Vue.createApp({
data(){
return{
listArray:['謝大腳','劉英','曉紅']
}
},
methods:{
},
template:`
<ul>
<li v-for="(item,index) in listArray" :key="index+item">[{{index}}]{{item}}</li>
</ul>
`
})
const vm=app.mount("#app")
關于循環是key值
為了提高循環時性能,在數組其中一項變化后,整個數組不進行全部重新渲染,Vue提供了綁定key值的使用方法,目的就是增加渲染性能,避免重復渲染。
加唯一性key值,增加后vue就會辨認出哪些內容被渲染后并沒有變化,而只渲染新變化的內容。
:key="index+item"
官方不建議使用索引index為key值,但此時又為了保持唯一性,所以這里使用了index+item進行綁定key值
v-for 循環對象
data(){
return{
//......
listObject:{
GirlOne:'謝大腳',
GirlTwo:'劉英',
GirlThree:'曉紅'
}
}
},
在模板中進行循環的時候,為了更好的語義化,我們把參數改為了value,key和index。然后進行循環。
<ul>
<li v-for="(value,key,index) in listObject" :key="key">
[{{index}}]{{value}}-{{key}}
</li>
</ul>
v-for循環數字
<span v-for="count in 99">{{count}}|</span>
v-for循環中使用判斷v-if
Vue給我們提供了<template>模版標簽,也就是一個空的占位符,目的就是解決模板中為完成業務邏輯,而使用的無用html標簽的現象。
template:`
<ul>
<template v-for="(value,key,index) in listObject">
<li v-if="index!=0">{{index}}[{{key}}]:{{value}}</li>
</template>
</ul>
`
按鈕綁定事件
methods:{
addCountClick(){
this.count++;
},
},
...
template:`
<div>目前已點佳麗數量{{count}}.</div>
<button @click="addCountClick">增加一位佳麗</button>
`
})
還可以用直接表達式
<button @click="count++">增加一位佳麗</button>
在編寫響應事件事,是可以接受一個event參數的,這個參數就是關于響應事件的一些內容。我們直接打印出event,你會發現內容比較多,其實這些參數還是值得一看的,在工作中有時真的會用到
methods:{
addCountClick(event){
this.count++;
console.log(event)
},
},
多參數
methods:{
addCountClick(num){
this.count+=num
},
},
template:`
//.....
<button @click="addCountClick(2)">增加一位佳麗</button>
`
})
有參數的情況下使用event
方法是參數增加$event。
methods:{
addCountClick(num,event){
this.count+=num;
console.log(event.target)
},
},
template:`
<div>目前已點佳麗數量{{count}}.</div>
<button @click="addCountClick(2,$event)">增加一位佳麗</button>
`
})
一個按鈕調傭2個方法
methods:{
//...
handleBtnClick1(){
alert(1)
},
handleBtnClick2(){
alert(2)
},
},
...
<button @click="handleBtnClick1(),handleBtnClick2()">增加一位佳麗</button>
事件修飾符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Demo19</title>
<script src="https://unpkg.com/vue@next" ></script>
</head>
<body>
<div id="app"></div>
</body>
<script>
const app=Vue.createApp({
data(){
return{
count:0
}
},
methods:{
addCountClick(){
this.count++
},
handleBtnClick1(){
alert(1)
},
},
template:`
<div @click="handleBtnClick1">
<div>目前已點佳麗數量{{count}}.</div>
<button @click=" addCountClick()">增加一位佳麗</button>
</div>
`
})
const vm=app.mount("#app")
</script>
</html>
(1)stop修飾符
在Vue中要停止冒泡是非常簡單的,只要加加一個事件修飾符stop就可以了。
<button @click.stop=" addCountClick()">增加一位佳麗</button>
(2)self修飾符
除了使用.stop修飾符,還有一種修飾符self,意思是只有點擊自己的時候才會被執行。 只不過加的位置要在家外層DOM元素的事件上。
template:`
<div @click.self="handleBtnClick1">
<div>目前已點佳麗數量{{count}}.</div>
<button @click=" addCountClick()">增加一位佳麗</button>
</div>
`
這時候你會發現點擊那里,都沒辦法觸發hanldeBtnClick1方法了,這是因為目前最外層div下都是獨立的DOM元素,就是都有成對標簽出現,都不屬于最外自己,都是他們的子元素。
可以編寫一段專屬最外層DIV的文字。
template:`
<div @click.self="handleBtnClick1">
我是最外層的DIV文字
<div>目前已點佳麗數量{{count}}.</div>
<button @click=" addCountClick()">增加一位佳麗</button>
</div>
`
這樣當點擊我是最外層的DIV文字時,就會觸犯handleBtnClick1方法了。
(3)prevent修飾符:
阻止默然行為的修飾符,這個以前講過,例如阻止form表單的默認提交行為。
(4)capture修飾符
改成捕獲模式,默認的模式都是冒泡模式,也就是從下到上,但是你用capture后,是從上到下的。
methods:{
addCountClick(){
this.count++
alert(0) //修改了此處
},
handleBtnClick1(){
alert(1)
},
},
template:`
<div @click.capture="handleBtnClick1"> //修改了此處
我是最外層的DIV文字
<div>目前已點佳麗數量{{count}}.</div>
<button @click=" addCountClick()">增加一位佳麗</button>
</div>
`
(5)once修飾符
事件只執行一次(視頻中作演示)。
template:`
<div @click.self="handleBtnClick1">
我是最外層的DIV文字
<div>目前已點佳麗數量{{count}}.</div>
<button @click.once=" addCountClick()">增加一位佳麗</button>
</div>
`
(6)passive修飾符:解決滾動時性能的修飾符
按鍵鼠標修飾符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Demo21</title>
<script src="https://unpkg.com/vue@next" ></script>
</head>
<body>
<div id="app"></div>
</body>
<script>
const app=Vue.createApp({
data(){
return{}
},
methods:{
},
template:`
<div">
<input />
</div>
`
})
const vm=app.mount("#app")
</script>
</html>
然后在methods部分加入一個方法handleKeyDwon( ),具體內容只是在控制臺打印出來keydown。
methods:{
handleKeyDown(){
console.log('keydow....')
}
},
然后在模板中的<input />中綁定鍵盤(任何按鍵)按下時響應keydown。
template:`
<div">
<input @keydown="handleKeyDown"/>
</div>
`
單個按鍵
就是指定鍵盤上某個特殊的按鍵時才會響應事件方法
如果現在的需求是,上面的代碼只有在按下回車時,才在控制臺進行打印,這時候就需要按鍵修飾符了。我們學的第一個按鍵修飾符enter
template:`
<div">
<input @keydown.enter="handleKeyDown"/>
</div>
`
})
類似這樣只響應單個按鍵的修飾符有很多:
enter 、tab、delete、esc、up 、down、left、right
鼠標修飾符
除了按鍵修飾符,還有鼠標修飾符,就是按下鼠標上的某個鍵時,才會響應。
最常用的就是: left、right、middle
現在的需求是在頁面上作一行文字JSPang.com,然后只有用鼠標右鍵點擊時,才會彈出alert( )。
先在methods里編寫一個handleClick方法。
methods:{
//...
handleClick(){
alert('click')
}
},
然后在模板中使用鼠標修飾符,確定只有點擊鼠標右鍵時才會響應。
<div @click.right="handleClick">JSPang.com</div>
表單數據雙向綁定
<script>
const app=Vue.createApp({
data(){
return{
name:''
}
},
template:`
<div>
<div>{{name}}</div>
<input v-model="name" /> //雙向綁定
</div>
`
})
const vm=app.mount("#app")
</script>
data中的變量改變時,綁定的數據會跟隨變化,此為一項修改;當通過頁面修改數據,data中的變量也隨之改變,這就是另一項修改。兩個彼此依存改變,就為雙向數據綁定。
目前這種就完成了<input />的雙向數據綁定。
textarea數據雙向綁定
以前我們寫HTML的時候,寫textarea標簽都是成對出現的,比如這樣<textarea></textarea>,如果想在Vue中實現textarea的雙向數據綁定,這時候只要寫單標簽就可以了,剩下的事情Vue底層就幫你完成了。
template:`
<div>
<div>{{name}}</div>
<div><input v-model="name" /></div>
<div><textarea v-model="name" /></div>
</div>
`
checkbox數據雙向綁定
checkbox是一個勾選框(復選框),如果只有一個選項時,我們可以給<checkbox />一個布爾值,也就是true或者false。
現在data中新聲明一個變量checked.
data(){
return{
name:'',
checked:false
}
},
...
<div>{{checked}}<input type="checkbox" v-model="checked" /></div>
checkbox還有一個功能就是復選,可以選擇多個。
比如還是象牙山三大美女的例子,現在勾選誰,誰就可以顯示在頁面上。
這時候要先定義一個變量,這個變量是一個空數組。
data(){
return{
name:'',
checked:false,
girls:[]
}
},
...
<div>
{{girls}}
大腳<input type="checkbox" v-model="girls" value="大腳" />
劉英<input type="checkbox" v-model="girls" value="劉英" />
曉紅<input type="checkbox" v-model="girls" value="曉紅" />
</div>
radio數據綁定
會了checkbox的雙向數據綁定,radio單選按鈕就簡單了。但是需要注意的是,既然是單選,這時候data中的變量就不能是一個數字了,一般是一個字符串。比如我們這里新定義了一個girl的變量。
data(){
return{
name:'',
checked:false,
girls:[],
girl:'',
}
},
...
<div>
{{girl}}
大腳<input type="radio" v-model="girl" value="大腳" />
劉英<input type="radio" v-model="girl" value="劉英" />
曉紅<input type="radio" v-model="girl" value="曉紅" />
</div>
綁定修飾符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Demo23</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="app"></div>
</body>
<script>
const app = Vue.createApp({
data() {
return {
checked: true,
}
},
template: `
<div>{{checked}}<input type="checkbox" v-model="checked" /></div>
`
})
const vm = app.mount("#app")
</script>
</html>
在瀏覽器中預覽時,當選擇復選框時,會顯示true,沒選中顯示false。
現在的需求是,我選中的時候顯示JSPang.com,沒選中的時候顯示技術胖。這時候要如何處理那?
Vue給我們提供了這樣兩個屬性true-value和false-value。我們在Data中新聲明一個變量name,值為空字符串。
data() {
return {
checked: true,
name: '',
}
},
...
template: `
<div>{{name}}
<input
type="checkbox"
v-model="name"
true-value="JSPang.com"
false-value="技術胖"
/></div>
`
v-model 數據修飾符--lazy修飾符
v-model也有很多實用的修飾符,現在就學習一下。第一個修飾符lazy,這個也叫做懶更新修飾符。
我們作一個input的綁定效果,現在data中聲明一個message變量,值為空。然后在模板中寫一個<input />并和message進行雙向數據綁定。
data() {
return {
checked: true,
name: '',
message:'',
}
},
...
<div>
{{message}}<input v-model.lazy="message" />
</div>
這時候當你在文本框中輸入任何內容的時候,插值表達式會跟著改變。如果你不想馬上顯示,就可以用lazy修飾符,這樣就可以實現當輸入完成后,失去焦點再進行改變。
number修飾符
<div>
{{typeof message}}<input v-model.number="message" />
</div>
trim修飾
trim修飾符大家一定不陌生,它是用來消除input框輸入內容前后的空格的。現在我們再字符串上輸入空格,其實它會在DOM元素上進行增加空格的,這個可以在控制臺清楚的看出(詳細請看視頻操作)。 加入trim修飾符后,Vue就會自動給我們去除前后的空格。
<div>
{{message1}}<input v-model.trim="message1" />
</div>