vue2 v-model—绑定事件—深度响应式

1st.v-model指令的详细用法

    在表单标签中,v-model双向绑定的用法有所区别。

首先在data中定义好数据:

data: {

                name: "张三",

                sex: '男',

                address: '南京市 雨花台区',

                isOK: true,

                hobbies: ['睡觉', '打游戏'],

                city:"苏州",

                foods:['巧克力','西瓜','米饭']

            }

文本框:使用v-model-value(简写v-model)直接双向绑定数据name

<p>文本框:<input type="text" v-model="name"> {{name}}</p>


单选框:使用v-model绑定sex值,name属性相同,且同时绑定数据sex的单选框会用自己的value替换掉sex

<p>单选框:

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

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

            {{sex}}

</p>


多行文本框:使用v-model-value(简写v-model)直接双向绑定数据address

<p>多行文本框:<textarea cols="30" rows="5" v-model="address"></textarea> {{address}}</p>


单个复选框:单个复选框时,使用v-model绑定一个boolean属性的数据,数据值为false时不选中,反之则选中

<p>单个复选框:<input type="checkbox" v-model="isOK">是否同意 {{isOK}}</p>


多个复选框:使用多个复选框时,使用v-model绑定一个数组,数组中的值和复选框的value相同时会选中复选框,当用户选中一个复选框时也会往数组里加入自身的value值

<p>多个复选框:

            <input type="checkbox" v-model="hobbies" value="睡觉">睡觉

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

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

            <input type="checkbox" v-model="hobbies" value="打游戏">打游戏

            <input type="checkbox" v-model="hobbies" value="敲代码">敲代码

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

             {{hobbies}}

</p>


选择器:选择器使用v-model绑定数据city city的值和选择器中option的value值相同时会选择相同的option,当选择元素时会把city中的值修改成自身的value

<p>选择器:

            <select v-model="city">

                <option value="北京">北京</option>

                <option value="上海">上海</option>

                <option value="南京">南京</option>

                <option value="苏州">苏州</option>

            </select>

            {{city}}

</p>


复数选择器:复数选择器使用v-model绑定一个数组,数组中是值与value中的值对应,数组中有则value对应的选中

 <p>

            复数选择器:

            <select v-model="foods" multiple>

                <option value="巧克力">巧克力</option>

                <option value="西瓜">西瓜</option>

                <option value="薯片">薯片</option>

                <option value="米饭">米饭</option>

            </select>

            {{foods}}

 </p>


2nd. v-model的修饰符

.lazy

    在默认情况下,v-model在每次input 事件触发后将输入框的值与数据进行同步(除了上述输入法组合文字时)。可以添加lazy 修饰符,从而转为在change事件之后进行同步:

<!-- 在“change”时而非“input”时更新 -->

<input v-model.lazy="msg">

.number

    如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符,因为即使在 type="number" 时,HTML 输入元素的值也总会返回字符串。如果这个值无法被 parseFloat() 解析,则会返回原始的值。

<input v-model.number="age" type="number">

.trim

    如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:

<input v-model.trim="msg">


3rd. 绑定事件

     v-on:指令用来绑定事件,简写为 @ 可以指定一个事件方法,事件方法要在methods里面定义。


指定事件方法时,如果没有给方法传递参数,默认会传递一个事件对象参数

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

如果我们传递了一个参数,还想再传递事件对象参数,就要通过$event关键字设置:

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

如果事件处理的逻辑比较简单,可以直接在行内编写:

         <button @click="num--">-</button>

        {{num}}

        <button @click.once="num++">+</button>

4rd.事件修饰符

    在监听键盘事件时,我们经常需要检查详细的按键。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符:

<!-- 只有在 `key` 是 `Enter` 时调用 `vm.submit()` -->
<input v-on:keyup.enter="submit">

可以直接将 KeyboardEvent.key 暴露的任意有效按键名转换为 kebab-case 来作为修饰符:

<input v-on:keyup.page-down="onPageDown">

为了在必要的情况下支持旧浏览器,Vue 提供了绝大多数常用的按键码的别名:

.enter

.tab

.delete (捕获“删除”和“退格”键)

.esc

.space

.up

.down

.left

.right

5rd.深度响应式

Vue 无法检测 property 的添加或移除。由于 Vue 会在初始化实例时对 property 执行 getter/setter 转化,所以 property 必须在 data 对象上存在才能让 Vue 将它转换为响应式的。

对于已经创建的实例,Vue 不允许动态添加根级别的响应式 property。但是,可以使用 Vue.set(object, propertyName, value) 方法向嵌套对象添加响应式 property。例如:

Vue.set(vm.someObject, 'b', 2)

您还可以使用 vm.$set 实例方法,这也是全局 Vue.set 方法的别名:

this.$set(this.someObject,'b',2)

用delete方法,删除指定对象的属性或数组的成员

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

您还可以使用 vm.$delete实例方法,这也是全局 Vue.delete方法的别名:

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

// 针对数组,只能通过以下方法,才能实现响应式:push() pop() unshift() shift() splice() reverse() sort()

如果不使用以上方法,那么也可以使用set和delete方法

// 这里set方法的参数分别是:指定的数组,数组的下标,对应的数据this.$set(this.arr,1,'苹果')

// 这里的delete方法的参数分别是:指定的数组,数组的下标 this.$delete(this.arr,1)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容