则监听这个名字的kebab-case版本是不会有任何效果的:



跟组件和prop不同,事件名不会被用作一个JavaScript变量名或属性名,所以就没有理由使用camelCase或PascalCase了。并且v-on事件监听器在DOM模板中会被自动转换为全小写(因为HTML是大小写不敏感的),所以v-on:myEvent将会变成v-on:myevent——导致myEvent不可能被监听到。

因此,我们推荐你始终使用kebab-case的事件名。

2自定义组件的v-model

2.2.0+新增

一个组件上的 v-model 默认会利用名为 value 的prop和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value 特性用于不同的目的。model 选项可以用来避免这样的冲突:

Vue.component('base-checkbox',{
model:{
prop:'checked',
event:'change'
},
props:{
checked:Boolean
},
template:
`

`
});

现在在这个组件上使用v-model的时候:



这里的loving的值将会传入这个名为checked的prop。同时当触发一个change事件并附带一个新的值的时候,这个loving的属性将会被更新。

注意你仍然需要在组件的props选项里声明checked这个prop。

3将原生事件绑定到组件

你可能有很多次想要在一个组件的根元素上直接监听一个原生事件。这时,你可以使用v-on的.native修饰符:



在有的时候这是很有用的,不过在你尝试监听一个类似的非常特定的元素时,这并不是个好主意。比如上述组件可能做了如下重构,所以根元素实际上是一个



这时,父级的.native监听器将静默失败。它不会产生任何报错,但是onFocus处理函数不会如你预期地被调用。

为了解决这个问题,Vue提供了一个$listeners属性,它是一个对象,里面包含了作用在这个组件上的所有监听器。例如:

{
focus:function(event){/*...*/}
input:function(value){/*...*/},
}

有了这个$listeners属性,你就可以配合v-on="$listeners"将所有的事件监听器指向这个组件的某个特定的子元素。对于类似的你希望它也可以配合v-model工作的组件来说,为这些监听器创建一个类似下述inputListeners的计算属性通常是非常有用的:

Vue.component('base-input',{
inheritAttrs:false,
props:['label','value'],
computed:{
inputListeners:function(){
varvm=this;
//Object.assign()会将所有的对象合并为一个新对象
returnObject.assign({},
//从父级添加所有的监听器
this.$listeners,
//添加自定义监听器或复写监听器行为
{
input:function(event){
vm.$emit('input',event.target.value);
}
}
)
}
},
template:`

`
});

现在组件是一个完全透明的包裹器了,也就是说它可以完全像一个普通的元素一样使用了:所有跟它相同的特性和监听器的都可以工作。

4.sync修饰符

2.3.0+新增

在有些情况下,我们可能需要对一个prop进行“双向绑定”。不幸的是,真正的双向绑定会带来维护上的问题,因为子组件可以修改父组件,且在父组件和子组件都没有明显的改动来源。

这也是为什么我们推荐以update:my-prop-name的模式触发事件取而代之。举个例子,在一个包含titleprop的假设的组件中,我们可以用以下方法表达对其赋新值的意图:

this.$emit('update:title',newTitle)

然后父组件可以监听那个事件并根据需要更新一个本地的数据属性。例如:



为了方便起见,我们为这种模式提供一个缩写,即.sync修饰符:



当我们用一个对象同时设置多个prop的时候,也可以将这个.sync修饰符和v-bind配合使用:



这样会把doc对象中的每一个属性(如title)都作为一个独立的prop传进去,然后各自添加用于更新的v-on监听器。

将v-bind.sync用在一个字面量的对象上,例如v-bind.sync=”{title:doc.title}”,是无法正常工作的,因为在解析一个像这样的复杂表达式的时候,有很多边缘情况需要考虑。

希望本文所述对大家vue.js程序设计有所帮助。

热门推荐

1 毛坯房验收经验和常识 看了之后再验房心里有底
2 二手房收房如何交接 二手房收房注意问题
3 专业验收毛坯房的价格 商品房验收合格的标准
4 精装房怎么验收 精装房请验房师有用吗
5 一般要到哪里找验房师 验房师有哪些作用呢
6 请人验房一般是多少钱 验房师费用是多少
7 怎样测量房子面积 建筑面积和使用面积怎么算
8 收房需要注意什么 仔细检查不松懈
9 收房时三书一证一表是什么 主要作用介绍
10 交房时交房税费有哪些 本文为你一一讲解
11 验房都需要验什么 要做哪些准备呢
12 毛坯房验房师有必要请吗 毛坯房装修完如何验收
13 地下室防水工程质量验收规范详解
14 水性涂料、油性涂料区别介绍
15 零基础布艺DIY工坊 教你做超萌猫头鹰钥匙包
16 三棵树漆怎么样?三棵树漆官方网站
17 家庭“装修套餐”中猫腻你知道吗?
18 小空间大浴望 卫浴间装修巧支招