V-model指令&綁定事件&深度響應(yīng)式

一、V-model指令.

在表單元素上的使用。
默認(rèn)觸發(fā)的是input事件。當(dāng)文本框的值發(fā)生變化后,立刻同步給數(shù)據(jù)

(1)、針對(duì)文本框的雙向綁定?;居梅?。

當(dāng)內(nèi)容發(fā)生變化時(shí),數(shù)據(jù)也發(fā)生變化

      <div>
           <!-- 針對(duì)文本框的雙向綁定。默認(rèn)觸發(fā)的是input事件。
                當(dāng)內(nèi)容發(fā)生變化時(shí),數(shù)據(jù)也發(fā)生變化 -->
           姓名: <input type="text" v-model="name">{{name}}
       </div>

vue內(nèi)容

data: {
                name: '李易峰',
            },

(2)、綁定多行文本域

 <div>
           <!-- textarea:多行文本域。cols:列。rows:行 -->
           地址: <textarea cols="50" rows="5" v-model="address"></textarea>{{address}}
       </div>

vue內(nèi)容

    data: {
                name: '李易峰',
                address: "四川省,成都市,金牛區(qū)",
            },

(3)、綁定一組單選框。每個(gè)單選框指定相同的屬性。

  <input v-model="sex" type="radio" value="男" name="sex">男
            <input v-model="sex" type="radio" value="女" name="sex">女
            <span style="color: red;">{{sex}}</span>

vue:

sex: '男',

4、綁定單個(gè)復(fù)選框。需要綁定一個(gè)布爾值(Boolean)

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

vue:

 isOk: false,

(5)、綁定多個(gè)復(fù)選框。需要綁定同一個(gè)數(shù)組

<div>
            <!-- v-model:綁定多個(gè)復(fù)選框,需要綁定同一個(gè)數(shù)組 -->
            愛(ài)好:
            <input v-model="hobbies" type="checkbox" value="唱歌">唱歌
            <input v-model="hobbies" type="checkbox" value="演戲">演戲
            <input v-model="hobbies" type="checkbox" value="旅游">旅游
            <input v-model="hobbies" type="checkbox" value="看書(shū)">看書(shū)
            <input v-model="hobbies" type="checkbox" value="看電影">看電影
            <input v-model="hobbies" type="checkbox" value="健身">健身
            <span style="color: red;">{{hobbies}}</span>
        </div>

vue:

 hobbies: ['唱歌', '演戲', '旅游', '看書(shū)'],

(6)、綁定一個(gè)數(shù)組

     <div>
            <!-- v-model:綁定一個(gè)數(shù)組 -->
            喜歡的食物:
            <!-- multiple:支持多個(gè)。 -->
            <select multiple v-model="foods">
                <option value="火鍋">火鍋</option>
                <option value="串串">串串</option>
                <option value="香蕉">香蕉</option>
                <option value="蘋(píng)果">蘋(píng)果</option>
                <option value="德芙">德芙</option>
                <option value="奶酪包">奶酪包</option>
            </select>
            <span style="color: salmon;">{{foods}}</span>
        </div>

vue:


修飾符:
(1)、.lazy修飾符??梢詫nput事件轉(zhuǎn)換為change事件。

<input type="text" v-model.lazy.trim="name">開(kāi)始{{name}}結(jié)束

(2)、.trim修飾符。用于去除內(nèi)容首尾空格。

<input type="text" v-model.lazy.trim="name">開(kāi)始{{name}}結(jié)束
        </div>

(3)、.number修飾符。會(huì)自動(dòng)將輸入的內(nèi)容轉(zhuǎn)換為number。

 年齡: <input type="text" v-model.number="age">{{age}}

二、綁定事件

1、@(v-on:)的簡(jiǎn)寫(xiě)。通過(guò)@指令綁定事件,指定一個(gè)methods選項(xiàng)里面定義的方法

(1)、調(diào)用方法時(shí),不傳參數(shù)。默認(rèn)會(huì)將事件對(duì)象作為參數(shù)傳遞

 <button @click="sayHi">sayHi</button

vue:

     //  e默認(rèn)參數(shù)
                sayHi(e) {
                    console.log(e);
                    alert('Hi!')
                },

(2)、調(diào)用方法時(shí),穿的什么參數(shù),接的就是什么參數(shù)。

<button @click="sayHellow('hello')">sayHellow</button>

vue:

  sayHellow(e) {
                    console.log(e);
                    alert("hello")
                },
####(3)、調(diào)用方法時(shí),傳遞一個(gè)$event參數(shù),該參數(shù)就是事件對(duì)象
···
<button @click="sayNice('Nice',$event)">sayNice</button>

vue:

sayNice(msg, e) {
                    console.log(e);
                    alert(msg)
                },

(4)、當(dāng)事件處理的代碼比較簡(jiǎn)單時(shí),可以將代碼直接寫(xiě)在行內(nèi)。注意:只能操作vue管理的數(shù)據(jù)

<button @click='age++'>年齡++</button>

vue:

  data: {
                age: 34
            },

(5)、.prevent。事件修飾符。用于阻止默認(rèn)行為。

<div class="box" @contextmenu.prevent="showBox">
            box
        </div>

vue:

     showBox(e) {
                    // 組織默認(rèn)行為
                    // e.preventDefault();               
                    alert('你好,我是BOX')
                },

(6)、.once:用于只綁定一次的事件方法。

  <div class="one" @click.once="one">
        </div>

vue:

 one() {
                    alert('你好,我是one')
                },

(7)、.stop:用于阻止事件冒泡。

  <div class="one" @click.once="one">
            <!-- .stop:用于阻止事件冒泡 -->
            <div class="two" @click.stop="two"></div>
        </div>

vue:

     two(e) {
                    // 阻止事件冒泡
                    // e.stopPropagation();                 
                    alert('你好,我是two')
                },

(8)、.self:只能在自身元素上觸發(fā)。不能在子元素上觸發(fā)。類(lèi)似冒泡。

   <div class="box2" @click.self="showbox2">
            <div class="box3">
            </div>
        </div>

vue:

   showbox2() {
                    alert('你好,我是box2')
                },

(9)、每次鍵盤(pán)彈起,都會(huì)調(diào)用事件函數(shù)。

 請(qǐng)輸入搜索關(guān)鍵字<input type="text" @keyup="keyup">

vue:

   keyup(e){
                   alert('你按鍵了')
                },

(10)、只在按下enter(回車(chē)鍵)的時(shí)候,才會(huì)調(diào)用事件方法。

 請(qǐng)輸入搜索關(guān)鍵字<input type="text" @keyup.enter="keyup1">

vue:

 keyup1(e){
                    let {keyCode}=e
                    if (keyCode===13) {  
                        alert('搜索指定的商品')
                        alert('你按下了回車(chē)鍵')
                    }
                    // alert('搜索指定的商品')
                },

三、深度響應(yīng)式

響應(yīng)式:數(shù)據(jù)發(fā)生變化時(shí),頁(yè)面自動(dòng)更新。
1、Vue通過(guò)$delete方法,刪除對(duì)象的屬性。并觸發(fā)響應(yīng)式
2、 在Vue中,操作數(shù)組,并觸發(fā)頁(yè)面更新,只能使用數(shù)組的以下方法.push,pop,unshift,shift,splice,reseolve,sort

arr:[11,22,33,44,55]
 this.arr.push(66)

css:

<style>
     #app button {
        background-color: sienna;
        color: wheat;
        border-radius: 10px;
    }

</style>

HTML:

<body>
    <div id="app">
        <div>
            姓名: <input type="text" v-model="name">{{name}}
        </div><br>
        <div>
            基本信息:
            <input type="text" v-model="obj.name">
            <input type="text" v-model.number="obj.age">
            <button @click="addSex">添加性別</button>
            <button @click="delAge">刪除年齡</button>
            <br><br>
            {{obj}}         
        </div><br>
        <div>
            數(shù)組:{{arr}} 
            <br><br>
            <button @click="addArr">添加數(shù)據(jù)</button>
            <button @click="delArr">刪除數(shù)據(jù)</button>
        </div>
    </div>

vue:

<script src='https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.js'></script>
    <script>
        Vue.config.productionTip = false
        new Vue({
            el: "#app",
            data: {
                //  基本類(lèi)型數(shù)據(jù)
                name: '李易峰',
                //  對(duì)象類(lèi)型數(shù)據(jù)
                obj: {
                    name: '李易峰',
                    age: 34,
                },
                arr:[11,22,33,44,55]
            },
            methods: {
                // 添加性別
                addSex() {
                    // obj對(duì)象里面的每一個(gè)屬性,都會(huì)采用Object.defineProperty去封裝,實(shí)現(xiàn)響應(yīng)式。
                    // 給對(duì)象后添加的數(shù)據(jù),不會(huì)采用Object.defineProperty封裝。所以就失去了響應(yīng)式
                    // this.obj.sex = '男'
                    this.$set(this.obj,'sex','男')
                },
                // 刪除年齡
                delAge(){
                    // 采用 delete 關(guān)鍵字刪除對(duì)象的屬性后。也沒(méi)有觸發(fā)頁(yè)面更新
                    // delete this.obj.age
                    this.$delete(this.obj,'age')
                },
                // 添加數(shù)組的數(shù)據(jù)
                addArr(){
                    // this.arr[5]=66  //采用這種方式,不會(huì)觸發(fā)頁(yè)面更新
                    // 如果想通過(guò)下標(biāo)操作數(shù)組,也必須要使用$set和$delete方法
                    this.$set(this.arr,5,66)                   
                },
                delArr(){
                    // this.arr.splice(2,1)
                    this.$delete(this.arr,2)
                }
            },
        })
    </script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容