本文实例讲述了Vue自定义属性。分享给大家供大家参考,具体如下:
1 事件名
跟组件和 prop 不同,事件名不存在任何自动化的大小写转换。而是触发的事件名需要完全匹配监听这个事件所用的名称。举个例子,如果触发一个 camelCase 名字的事件:
this.$emit('myEvent')
则监听这个名字的 kebab-case 版本是不会有任何效果的:
<my-component v-on:my-event="doSomething"></my-component>
跟组件和 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: ` <input type="checkbox" v-bind:checked="checked" v-on:change="$emit('change',$event.target.checked)" > `});
现在在这个组件上使用 v-model 的时候:
<base-checkbox v-model="loving"></base-checkbox>
这里的 loving 的值将会传入这个名为 checked
的 prop
。同时当 <base-checkbox>
触发一个 change
事件并附带一个新的值的时候,这个 loving
的属性将会被更新。
注意你仍然需要在组件的 props 选项里声明 checked 这个 prop。
3 将原生事件绑定到组件
你可能有很多次想要在一个组件的根元素上直接监听一个原生事件。这时,你可以使用 v-on
的 .native
修饰符:
<base-input v-on:focus.native="onFocus"></base-input>
在有的时候这是很有用的,不过在你尝试监听一个类似 <input> 的非常特定的元素时,这并不是个好主意。比如上述<base-input>组件可能做了如下重构,所以根元素实际上是一个 <label> 元素:
<label> {{ label }} <input v-bind=$attrs", v-bind:value="value" v-on:input="$emit('input',$event.target.value)" ></label>
新闻热点
疑难解答
图片精选