视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
如何操作vue在自定义组件内启用用v-model
2020-11-27 19:44:14 责编:小采
文档


这次给大家带来如何操作vue在自定义组件内启用用v-model,操作vue在自定义组件内启用用v-model的注意事项有哪些,下面就是实战案例,一起来看一下。

v-model指令

所谓的“指令”其实就是扩展了HTML标签功能(属性)。

先来一个组件,不用vue-model,正常父子通信

<!-- parent -->
<template>
<p class="parent">
 <p>我是父亲, 对儿子说: {{sthGiveChild}}</p>
 <Child @returnBack="turnBack" :give="sthGiveChild"></Child>
</p>
</template>
<script>
import Child from './Child.vue';
export default {
 data() {
 return {
 sthGiveChild: '给你100块'
 };
 },
 components: {
 Child
 },
 methods: {
 turnBack(val) {
 this.sthGiveChild = val;
 }
 }
}
</script>
<!-- child -->
<template>
<p class="child">
 <p>我是儿子,父亲对我说: {{give}}</p>
 <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="returnBackFn">回应</a>
</p>
</template>
<script>
export default {
 props: {
 give: String
 },
 methods: {
 returnBackFn() {
 this.$emit('returnBack', '还你200块');
 }
 }
}
</script>

点击回应后,父亲对儿子说的话变成了儿子的回应。儿子收到的信息也变了,实现通信。

改用v-model

<!-- parent -->
<template>
<p class="parent">
 <p>我是父亲, 对儿子说: {{sthGiveChild}}</p>
 <Child v-model="sthGiveChild"></Child>
</p>
</template>
<script>
import Child from './Child.vue';
export default {
 data() {
 return {
 sthGiveChild: '给你100块'
 };
 },
 components: {
 Child
 }
}
</script>
<!-- child -->
<template>
<p class="child">
 <p>我是儿子,父亲对我说: {{give}}</p>
 <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="returnBackFn">回应</a>
</p>
</template>
<script>
export default {
 props: {
 give: String
 },
 model: {
 prop: 'give',
 event: 'returnBack'
 },
 methods: {
 returnBackFn() {
 this.$emit('returnBack', '还你200块');
 }
 }
}
</script>

文案虽有不同,但是效果最终是一致的。

看看官方自定义组件的v-model

官方例子https://vuefe.cn/v2/api/#model

有这么一句话: 默认情况下,一个组件上的 v-model 会把 value 用作 prop 且把 input 用作 event。

尝试把上边子组件的例子改一下,也是跑的通的

<!-- child -->
<template>
<p class="child">
 <p>我是儿子,父亲对我说: {{value}}</p>
 <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="returnBackFn">回应</a>
</p>
</template>
<script>
export default {
 props: {
 value: String
 },
 methods: {
 returnBackFn() {
 this.$emit('input', '还你200块');
 }
 }
}
</script>

做一下总结:

如果你懒,不想自己去处理事件,那就用默认的 'value' && 'input' 事件去处理,如果用原生事件的,甚至连model属性也可以省去。

如果你想自己的代码比较明确,区分出自定义事件,那么下面的组合才是你的菜。

prop和event看你自己心情定义,当然要知名见意【尽量避开关键字】

model: {
prop: 'someProp', // 注意,是prop,不带s。我在写这个速记的时候,多写了一个s,调试到怀疑人生
event: 'someEvent'
}
this.$emit('someProp', [returnValueToParent])

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

怎样使用WebPack配置vue多页面

怎样利用webpack搭建react开发环境

下载本文
显示全文
专题