v-model、sync、lazy使用说明

v-model使用

v-model是一个语法糖,它会自动在元素或组件上添加 :value = ‘’ 和 @input = ''
当input的type是text时,它的value属性代表输入框的初始值并且可修改

在元素上使用

   <input v-model='name'/>

等同于

  <input :value = 'inputValue' @input='inputClick'/>
  <button @click="changeInputValue">修改inputValue值</button>
   data() {
    return {
      inputValue:''
    }
  },
  methods:{
      inputClick(e){
          this.inputValue = e.target.value;
      },
      changeInputValue() {
          this.inputValue = "生活"
    }
  }
  • 当给input框输入内容时,会自动触发input事件,通过input事件更新绑定的inputValue值

  • 当通过js修改inputValue时,会更新input的value值,进而修改input框中的内容

    在组件上使用

通过在组件上使用v-model,可实现父子组件数据的双向绑定

父组件引入子组件children

 <children v-model = 'name'/>

等同于

 <children :value="name" @input="name = $event"></children>

子组件

 <div @click = 'btnClick'/>
   export defalut{
       props:{
           value:String
       },
       methods:{
           btnClick(){
               this.$emit('input', 'xiaoming')
           }
       }
   }

v-model内部原理

当遇到v-model指令时会给标签添加input事件

   node.addEventListener('input', e => {
              vm[name] = e.target.value
          })

当给vm[name]赋值时,就是触发object.defaultProperty的set方法,最终给input的value赋值

v-model.lazy使用

在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步。你可以添加 lazy 修饰符,从而转为在 change 事件之后进行同步

  • input事件是在元素值变化时就会触发
  • change事件是在元素失去焦点时才会触发

.sync 修饰符

父组件

<children :title.sync="doc.title"></children>

等同于

  <children
      :title="doc.title"
      @update:title="doc.title = $event"
  ></children>

子组件

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

v-bind.sync使用

通过.sync 修饰符和 v-bind 配合使用,可以让obj对象的每个属性都具有了双向绑定的效果,以便让代码更简洁
父组件

  <children
      v-bind.sync="obj"
  ></children>
  data() {
    return {
      obj:{
        name:'xiaoming',
        age:30
      }
    }
  }

子组件

  props: {
    name:String,
    age:Number,
  },
  methods: {
    setName() {
        this.$emit('update:name', 'xiaohong')
    },
    setAge() {
        this.$emit('update:age', 100)
    }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值