首页 > 其他 > 详细

v-model的拓展用法

时间:2020-09-22 15:06:53      阅读:67      评论:0      收藏:0      [点我收藏+]

先简单聊一下v-model的基本用法,这个是vue提供的一个语法糖.双向数据绑定.

<input v-model="name">

data() {
  return {
    name: ‘zs‘
  }
}

一般我们用在input,textarea中,用户输入内容可以改变对应的数据.等同于以下的代码

<input :value="name" @input="changeValue">

data() {
  return {
    name: ‘zs‘
  }
},
methods: {
  changeValue (e) {
    this.name = e.target.value
  }
}

 

这样使用的话,比较有局限性,只能使用在input和textarea一些文本输入框中,其实在任意组件都可以使用v-model这个语法糖的,vue也是支持这样的写法

举个简单的例子,控制弹框的开关就可以使用v-model使代码看着更整洁

// 父组件
<popup v-model="show"></popup>
<button @click="togglePopup"></button>

data () {
  return {
    show: false
  }
},
methods: {
  togglePopup() {
    this.show = !this.show
  }
}

// 子组件 popup
props: [‘value‘],
methods: {
  close() {
    this.$emit(‘input‘, false)
  }
}

 同理,这样的写法等同于:

// 父组件
<popup :value="show" @input="(val) => this.show = val"></popup>

其他的写法不变的,这个时候又有个问题,v-model是默认的向子组件传递的value的参数,然后监听input事件去改变传递过来的值.

假设我子组件的value属性,或者input事件已经有了对应的值或者函数怎么办呢.这个时候vue也在实例上提供了一个model的属性为我们解决了这一问题

// 父组件
<popup v-model="show"></popup>
<button @click="togglePopup"></button>

data () {
  return {
    show: false
  }
},
methods: {
  togglePopup() {
    this.show = !this.show
  }
}

// 子组件 popup
model: {
  prop: ‘myValue‘, //这里的prop对应的props的值
  event: ‘myEvent‘, // 这里的event对应的自定义的触发事件
}
props: [‘myValue‘], // 这里的myValue可以任意命名了,但是需要跟model里面的prop对应
methods: {
  close() {
    // 这里就需要通过model里面的event的值来触发事件
    this.$emit(‘myEvent‘, false)
  }
}

这样就可以实现我们的自定义的v-model,也是等同于下面的代码:

// 父组件
<popup :myValue="show" @myEvent="(val) => this.show = val"></popup>

综上: 

    1.v-model可以使用在任意父子组件中,不止是input或者textarea.

    2.v-model是vue提供的一个语法糖,使用起来可以让代码看起来很整洁.当然不使用的话也是可以实现对应的效果的

v-model的拓展用法

原文:https://www.cnblogs.com/soilder/p/13708715.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!