V-model指令的詳細(xì)用法、綁定事件、深度響應(yīng)式

? ? <div id="app">

? ? ? ? <div class="item">

? ? ? ? ? ? <span>姓名:</span>

? ? ? ? ? ? <!-- v-model指令,綁定文本框的內(nèi)容,實(shí)現(xiàn)雙向數(shù)據(jù)綁定 -->

? ? ? ? ? ? <input type="text" v-model="name">{{name}}

? ? ? ? </div>

? ? ? ? <div class="item">

? ? ? ? ? ? <span>地址:</span>

? ? ? ? ? ? <!-- v-model指令,綁定多行文本框的內(nèi)容,實(shí)現(xiàn)雙向數(shù)據(jù)綁定 -->

? ? ? ? ? ? <textarea cols="80" rows="4" v-model="address"></textarea>{{address}}

? ? ? ? </div>

? ? ? ? <div class="item">

? ? ? ? ? ? <span>是否同意:</span>

? ? ? ? ? ? <!-- 單個(gè)復(fù)選框,通過v-model綁定一個(gè)布爾值 -->

? ? ? ? ? ? <input type="checkbox" v-model="isOK">{{isOK}}

? ? ? ? </div>

? ? ? ? <div class="item">

? ? ? ? ? ? <span>愛好:</span>

? ? ? ? ? ? <!-- 多個(gè)復(fù)選框,通過v-model綁定到同一個(gè)數(shù)組 -->

? ? ? ? ? ? <input type="checkbox" value="抽煙" v-model="hobbies">抽煙

? ? ? ? ? ? <input type="checkbox" value="喝酒" v-model="hobbies">喝酒

? ? ? ? ? ? <input type="checkbox" value="燙頭" v-model="hobbies">燙頭

? ? ? ? ? ? <input type="checkbox" value="唱" v-model="hobbies">唱

? ? ? ? ? ? <input type="checkbox" value="跳" v-model="hobbies">跳

? ? ? ? ? ? <input type="checkbox" value="籃球" v-model="hobbies">籃球

? ? ? ? ? ? {{hobbies}}

? ? ? ? </div>

? ? ? ? <div class="item">

? ? ? ? ? ? <span>性別:</span>

? ? ? ? ? ? <!-- 多個(gè)單選框,通過v-model綁定同一個(gè)數(shù)據(jù) -->

? ? ? ? ? ? <input type="radio" value="男" name="sex" v-model="sex">男

? ? ? ? ? ? <input type="radio" value="女" name="sex" v-model="sex">女

? ? ? ? ? ? {{sex}}

? ? ? ? </div>

? ? ? ? <div class="item">

? ? ? ? ? ? <span>學(xué)歷:</span>

? ? ? ? ? ? <!-- 通過v-model可以給下拉框綁定一個(gè)屬性 -->

? ? ? ? ? ? <select v-model="xueli">

? ? ? ? ? ? ? ? <option value="小學(xué)">小學(xué)</option>

? ? ? ? ? ? ? ? <option value="碩士">碩士</option>

? ? ? ? ? ? ? ? <option value="博士">博士</option>

? ? ? ? ? ? ? ? <option value="博士后">博士后</option>

? ? ? ? ? ? </select>

? ? ? ? ? ? {{xueli}}

? ? ? ? </div>

? ? ? ? <div class="item">

? ? ? ? ? ? <span>美食:</span>

? ? ? ? ? ? <!-- 下拉框設(shè)置multiple屬性后,就可以選擇多個(gè)項(xiàng) -->

? ? ? ? ? ? <!-- 通過v-model可以給下拉框綁定一個(gè)數(shù)組 -->

? ? ? ? ? ? <select v-model="meishi" multiple>

? ? ? ? ? ? ? ? <option value="螃蟹">螃蟹</option>

? ? ? ? ? ? ? ? <option value="龍蝦">龍蝦</option>

? ? ? ? ? ? ? ? <option value="雞腿">雞腿</option>

? ? ? ? ? ? ? ? <option value="牛排">牛排</option>

? ? ? ? ? ? ? ? <option value="海鮮">海鮮</option>

? ? ? ? ? ? </select>

? ? ? ? ? ? {{meishi}}

? ? ? ? </div>

? ? ? ? <div class="item">

? ? ? ? ? ? <span>修飾符lazy</span>

? ? ? ? ? ? <!-- v-model指令,添加.lazy修飾符,在文本框失去焦點(diǎn)后在更新數(shù)據(jù) ?-->

? ? ? ? ? ? <input type="text" v-model.lazy="msg">{{msg}}

? ? ? ? </div>

? ? ? ? <div class="item">

? ? ? ? ? ? <span>修飾符number</span>

? ? ? ? ? ? <!-- v-model指令,添加.number修飾符,在修改文本框內(nèi)容時(shí),會(huì)將修改后的內(nèi)容轉(zhuǎn)為number類型 -->

? ? ? ? ? ? <input type="text" v-model.number="age">{{age+10}}

? ? ? ? </div>

? ? ? ? <div class="item">

? ? ? ? ? ? <span>修飾符trim</span>

? ? ? ? ? ? <!-- v-model指令,添加.trim修飾符,在修改文本框內(nèi)容時(shí),會(huì)忽略前后的空格 -->

? ? ? ? ? ? <input type="text" v-model.trim="city">

? ? ? ? ? ? <span>長(zhǎng)度:{{city.length}}</span>

? ? ? ? </div>

? ? </div>

? ? let vm = new Vue({

? ? el:'#app',

? ? data:{

? ? name:'張三',

? ? address:'北京市朝陽區(qū)',

? ? // 用于表示是否同意

? ? isOK:true,

? ? // 愛好數(shù)組

? ? hobbies:["燙頭","跳"],

? ? // 性別

? ? sex:'女',

? ? // 學(xué)歷

? ? xueli:'博士',

? ? // 美食

? ? meishi:[],

? ? // 消息

? ? msg:'',

? ? //年齡

? ? age:20,

? ? city:'北京'

? ? },

? ? })

綁定事件

?<div id="app">

? ? ? ? <!-- v-on:指令綁定事件,可以指定一個(gè)事件方法,事件方法要在methods里面定義。

? ? 指定事件方法時(shí),如果沒有給方法傳遞參數(shù),默認(rèn)會(huì)傳遞一個(gè)事件對(duì)象參數(shù) -->

? ? ? ? <button v-on:click="sayHi">Say Hi</button>

? ? ? ? <br><br>

? ? ? ? <!-- 如果我們傳遞了一個(gè)參數(shù),還想再傳遞事件對(duì)象參數(shù),就要通過$event關(guān)鍵字設(shè)置。 -->

? ? ? ? <button v-on:click="sayHello('你好',$event)">Say Hello</button>

? ? ? ? <br>

? ? ? ? <br>

? ? ? ? <!-- 如果事件處理的邏輯比較簡(jiǎn)單,可以直接在行內(nèi)編寫。 -->

? ? ? ? <button v-on:click="name+='*'">修改name</button>{{name}}

? ? ? ? <hr>

? ? ? ? <!-- @是v-on:的簡(jiǎn)寫 -->

? ? ? ? <!-- 通過.prevent事件修飾符,阻止默認(rèn)行為 -->

? ? ? ? <div class="a" @click="a" @contextmenu.prevent="cm">

? ? ? ? ? ? <!-- 通過.stop事件修飾符,阻止事件冒泡 -->

? ? ? ? ? ? <div class="b" @click.stop="b"></div>

? ? ? ? </div>

? ? ? ? <br>

? ? ? ? <!-- 通過.once事件修飾符,讓事件方法只執(zhí)行一次 -->

? ? ? ? <button @click.once="once">只觸發(fā)一次</button>

? ? ? ? <br><br>

? ? ? ? <!-- 通過.self事件修飾符,控制事件在當(dāng)前元素自身觸發(fā),不在內(nèi)部元素身上觸發(fā) -->

? ? ? ? <div class="c" @click.self="c">

? ? ? ? ? ? <div class="d"></div>

? ? ? ? </div>

? ? ? ? <br>

? ? ? ? <!-- 默認(rèn)情況下,手機(jī)的捕獲模式是,從內(nèi)部往外部挨個(gè)執(zhí)行。

? ? 如果外部事件添加.capture修飾符,此時(shí)事件的不會(huì)模式就變成了,從外部外內(nèi)部挨個(gè)執(zhí)行。 -->

? ? ? ? <div class="e" @click.capture="e">

? ? ? ? ? ? <div class="f" @click="f"></div>

? ? ? ? </div>

? ? ? ? <br>

? ? ? ? <!-- passive就是為了告訴瀏覽器,不用查詢了,我們沒用preventDefault阻止默認(rèn)動(dòng)作 -->

? ? ? ? <div class="g" @scroll.passive="g">

? ? ? ? ? ? <div class="h"></div>

? ? ? ? </div>

? ? </div>

? ? new Vue({

? ? el:'#app',

? ? data() {

? ? return {

? ? name:'張三'

? ? }

? ? },

? ? methods: {

? ? sayHi(e){

? ? console.log(e);

? ? console.log('Hi');

? ? },

? ? sayHello(val,e){

? ? console.log(val);

? ? console.log(e);

? ? },

? ? a(){

? ? alert('大家好!我是a')

? ? },

? ? b(){

? ? // 通過事件對(duì)象,阻止事件冒泡

? ? // e.stopPropagation();

? ? alert('大家好!我是b')

? ? },

? ? cm(){

? ? // 通過事件對(duì)象,阻止默認(rèn)行為

? ? // e.preventDefault();

? ? console.log('哈哈');

? ? },

? ? once(){

? ? alert('你好呀!')

? ? },

? ? c(){

? ? alert('大家好!我是c')

? ? },

? ? e(){

? ? alert('大家好!我是e')

? ? },

? ? f(){

? ? alert('大家好!我是f')

? ? },

? ? g(){

? ? console.log(11);

? ? }

? ? },


深度響應(yīng)式

1. 按鍵修飾符

? ?new Vue({

? ? el:'#app',

? ? // data選項(xiàng),定義屬性,該選項(xiàng)可以是一個(gè)對(duì)象,也可以是一個(gè)方法返回一個(gè)對(duì)象。

? ? data:{

? ? // 商品數(shù)組

? ? goodses:['小米手機(jī)','華為電腦','蘋果手表','尼康相機(jī)'],

? ? // 搜索關(guān)鍵字

? ? keywords:'',

? ? // 搜索結(jié)果

? ? content:''

? ? },

? ? // methods選項(xiàng),定義方法

? ? methods: {

? ? keydown(){

? ? // 字符串的includes()方法,用于檢查字符串中是否包含指定的內(nèi)容,包含返回true

? ? this.content = this.goodses.find(g=>g.includes(this.keywords))

? ? }

? ? },

? ? })


2. 深度響應(yīng)式

? <div id="app">

? ? ? ? <button @click="name='李四'">修改姓名</button>

? ? ? ? <h2>{{name}}</h2>

? ? ? ? <hr>

? ? ? ? <button @click="obj.name='張飛'">修改姓名</button>

? ? ? ? <button @click="addJob">添加工作屬性</button>

? ? ? ? <button @click="delAge">刪除年齡屬性</button>

? ? ? ? <h2>{{obj}}</h2>

? ? ? ? <hr>

? ? ? ? <button @click="arr.push('可樂')">添加可樂</button>

? ? ? ? <button @click="arr.splice(1,1,'榴蓮')">通過方法修改元素</button>

? ? ? ? <button @click="updateArr">通過下標(biāo)修改元素</button>

? ? ? ? <button @click="delArr">通過下標(biāo)刪除元素</button>

? ? ? ? <h2>{{arr}}</h2>

? ? </div>

? ? // Vue實(shí)例,在初始化的時(shí)候,會(huì)將對(duì)象身上的所有數(shù)據(jù),做響應(yīng)式處理,

? ? // 之后再向?qū)ο笾刑砑訉傩裕@些屬性就不再具備響應(yīng)式能力了。

? ? // 針對(duì)數(shù)組,只能通過以下方法,才能實(shí)現(xiàn)響應(yīng)式:push() pop() unshift() shift() splice() reverse() sort()

? ? // 如何解決上面的問題?

? ? // 方式1:通過Vue的set方法,更新指定的對(duì)象屬性或數(shù)組成員;delete方法,刪除指定對(duì)象的屬性或數(shù)組的成員

? ? // 方式2:通過Vue實(shí)例的$set方法,更新指定的對(duì)象屬性或數(shù)組成員;$delete方法,刪除指定對(duì)象的屬性或數(shù)組的成員

? ? Vue.config.productionTip = false

? ? let vm = new Vue({

? ? el:"#app",

? ? data:{

? ? // 基本類型數(shù)據(jù)

? ? name:'張三',

? ? // 對(duì)象數(shù)據(jù)

? ? obj:{

? ? name:'張杰',

? ? age:20,

? ? sex:'男'

? ? },

? ? // 數(shù)組數(shù)據(jù)

? ? arr:['面包','餅干','薯片','巧克力']

? ? },

? ? methods: {

? ? // 給對(duì)象添加工作屬性的方法

? ? addJob(){

? ? // 通過觀察可以發(fā)現(xiàn),我們可以給對(duì)象添加屬性,但是添加后的屬性,不具備響應(yīng)式能力。

? ? // this.obj.job='前端開發(fā)工程師'

? ? // set方法的參數(shù)分別是:指定的對(duì)象,對(duì)象的屬性,屬性值

? ? // Vue.set(this.obj,'job','前端開發(fā)工程師')

? ? this.$set(this.obj,'job','前端開發(fā)工程師')

? ? },

? ? // 刪除對(duì)象身上年齡的方法

? ? delAge(){

? ? // delete this.obj.age

? ? // delete煩煩煩的參數(shù)分別是:指定的對(duì)象,對(duì)象的屬性

? ? // Vue.delete(this.obj,'age')

? ? this.$delete(this.obj,'age')

? ? },

? ? // 修改數(shù)組身上的成員

? ? updateArr(){

? ? // this.arr[1] = '蘋果'

? ? // 這里set方法的參數(shù)分別是:指定的數(shù)組,數(shù)組的下標(biāo),對(duì)應(yīng)的數(shù)據(jù)

? ? this.$set(this.arr,1,'蘋果')

? ? },

? ? // 根據(jù)下標(biāo)刪除數(shù)組元素

? ? delArr(){

? ? // delete this.arr[1]

? ? // 這里的delete方法的參數(shù)分別是:指定的數(shù)組,數(shù)組的下標(biāo)

? ? this.$delete(this.arr,1)

? ? }

? ? },

? ? })


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評(píng)論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,615評(píng)論 3 419
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,826評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,227評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,447評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,992評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,807評(píng)論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,001評(píng)論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評(píng)論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,243評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評(píng)論 1 287
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,709評(píng)論 3 393
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,996評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容