子组件改变父组件的值

子组件改变父组件的值,会报错。其实是采用单向数据流,子组件不能直接改变父组件的值,是以单向数据流的方式流转数据。可以采用以下两种减少代码量的方式改变父组件的值(忽略on和emit事件方式)。
方法一::xx.sync 和 $emit(‘update:xx’)

Vue.component('child', {
    props: ['selected'],
    template: `
    <div style="border: 1px solid gray;">
      <div>{{selected}}</div>
      <button @click="$emit('update:selected', 1)">Button 1</button>
      <button @click="$emit('update:selected', 2)">Button 2</button>
    </div>
    `
})
new Vue({
    el: '#app',
    data() {
    return {
      value: 1
    }
    },
    template: `
    <child :selected.sync="value"></child>
    `
})

<child :selected.sync="value"></child>
等价于
<child :selected="value" @update="selected=$event"></child>
方法二:使用v-model 和$emit(‘input’)

Vue.component('child', {
  props: ['value'],
  template: `
    <div style="border: 1px solid gray;">
      <div>{{value}}</div>
      <button @click="$emit('input', 1)">Button 1</button>
      <button @click="$emit('input', 2)">Button 2</button>
    </div>
  `
})
new Vue({
  el: '#app',
  data() {
    return {
      value: 1
    }
  },
  template: `
    <child v-model="value"></child>
  `
})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值