V-model指令&绑定事件&深度响应式

一、V-model指令.

在表单元素上的使用。
默认触发的是input事件。当文本框的值发生变化后,立刻同步给数据

(1)、针对文本框的双向绑定。基本用法。

当内容发生变化时,数据也发生变化

      <div>
           <!-- 针对文本框的双向绑定。默认触发的是input事件。
                当内容发生变化时,数据也发生变化 -->
           姓名: <input type="text" v-model="name">{{name}}
       </div>

vue内容

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

(2)、绑定多行文本域

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

vue内容

    data: {
                name: '李易峰',
                address: "四川省,成都市,金牛区",
            },

(3)、绑定一组单选框。每个单选框指定相同的属性。

  <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、绑定单个复选框。需要绑定一个布尔值(Boolean)

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

vue:

 isOk: false,

(5)、绑定多个复选框。需要绑定同一个数组

<div>
            <!-- v-model:绑定多个复选框,需要绑定同一个数组 -->
            爱好:
            <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="看书">看书
            <input v-model="hobbies" type="checkbox" value="看电影">看电影
            <input v-model="hobbies" type="checkbox" value="健身">健身
            <span style="color: red;">{{hobbies}}</span>
        </div>

vue:

 hobbies: ['唱歌', '演戏', '旅游', '看书'],

(6)、绑定一个数组

     <div>
            <!-- v-model:绑定一个数组 -->
            喜欢的食物:
            <!-- multiple:支持多个。 -->
            <select multiple v-model="foods">
                <option value="火锅">火锅</option>
                <option value="串串">串串</option>
                <option value="香蕉">香蕉</option>
                <option value="苹果">苹果</option>
                <option value="德芙">德芙</option>
                <option value="奶酪包">奶酪包</option>
            </select>
            <span style="color: salmon;">{{foods}}</span>
        </div>

vue:


修饰符:
(1)、.lazy修饰符。可以将input事件转换为change事件。

<input type="text" v-model.lazy.trim="name">开始{{name}}结束

(2)、.trim修饰符。用于去除内容首尾空格。

<input type="text" v-model.lazy.trim="name">开始{{name}}结束
        </div>

(3)、.number修饰符。会自动将输入的内容转换为number。

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

二、绑定事件

1、@(v-on:)的简写。通过@指令绑定事件,指定一个methods选项里面定义的方法

(1)、调用方法时,不传参数。默认会将事件对象作为参数传递

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

vue:

     //  e默认参数
                sayHi(e) {
                    console.log(e);
                    alert('Hi!')
                },

(2)、调用方法时,穿的什么参数,接的就是什么参数。

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

vue:

  sayHellow(e) {
                    console.log(e);
                    alert("hello")
                },
####(3)、调用方法时,传递一个$event参数,该参数就是事件对象
···
<button @click="sayNice('Nice',$event)">sayNice</button>

vue:

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

(4)、当事件处理的代码比较简单时,可以将代码直接写在行内。注意:只能操作vue管理的数据

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

vue:

  data: {
                age: 34
            },

(5)、.prevent。事件修饰符。用于阻止默认行为。

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

vue:

     showBox(e) {
                    // 组织默认行为
                    // 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:只能在自身元素上触发。不能在子元素上触发。类似冒泡。

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

vue:

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

(9)、每次键盘弹起,都会调用事件函数。

 请输入搜索关键字<input type="text" @keyup="keyup">

vue:

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

(10)、只在按下enter(回车键)的时候,才会调用事件方法。

 请输入搜索关键字<input type="text" @keyup.enter="keyup1">

vue:

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

三、深度响应式

响应式:数据发生变化时,页面自动更新。
1、Vue通过$delete方法,删除对象的属性。并触发响应式
2、 在Vue中,操作数组,并触发页面更新,只能使用数组的以下方法.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>
            数组:{{arr}} 
            <br><br>
            <button @click="addArr">添加数据</button>
            <button @click="delArr">删除数据</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: {
                //  基本类型数据
                name: '李易峰',
                //  对象类型数据
                obj: {
                    name: '李易峰',
                    age: 34,
                },
                arr:[11,22,33,44,55]
            },
            methods: {
                // 添加性别
                addSex() {
                    // obj对象里面的每一个属性,都会采用Object.defineProperty去封装,实现响应式。
                    // 给对象后添加的数据,不会采用Object.defineProperty封装。所以就失去了响应式
                    // this.obj.sex = '男'
                    this.$set(this.obj,'sex','男')
                },
                // 删除年龄
                delAge(){
                    // 采用 delete 关键字删除对象的属性后。也没有触发页面更新
                    // delete this.obj.age
                    this.$delete(this.obj,'age')
                },
                // 添加数组的数据
                addArr(){
                    // this.arr[5]=66  //采用这种方式,不会触发页面更新
                    // 如果想通过下标操作数组,也必须要使用$set和$delete方法
                    this.$set(this.arr,5,66)                   
                },
                delArr(){
                    // this.arr.splice(2,1)
                    this.$delete(this.arr,2)
                }
            },
        })
    </script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容