vue中子组件更新父组件

一、关于vue中watch的认识

我们要监听一个属性的的变化就使用watch一般是父组件传递给子组件的时候

•1、常见的使用场景

watch:{
value(val) {
console.log(val);
this.visible = val;
}
}

•2、如果要一开始就执行

watch: {
  firstName: {
    handler(newName, oldName) {
      this.fullName = newName + '-' + this.lastName;
    },
    immediate: true,
  }
}

•3、深度监听(数组、对象)

...
watch: {
  obj: {
    handler(newName, oldName) {
    console.log('///')
  },
  immediate: true,
  deep: true,
}
...

二、关于子组件修改父组件属性认识

在vue2.0+ 后不再是双向绑定,如果要进行双向绑定需要特殊处理。

[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop’s value. Prop being mutated: “你修改的属性名”

•1、通过事件发送给父组件来修改

**在子组件test1中**
<input type="text" v-model="book"/>
<button @click="add">添加</button>
<p v-for="(item, index) of books" :key="index">{{item}}</p>
methods: {
  add() {
    // 直接把数据发送给父组件
    this.$emit('update', this.book);
    this.book = '';
  },
},
**在父组件中**
<test1 :books="books" @update="addBook"></test1>
...
addBook(val) {
  this.books = new Array(val)
},

•2、使用.sync 来让子组件修改父组件的值(其实是上面方法的精简版)

在父组件中,直接在需要传递的属性后面加上.sync

<template>
  <div>
    <h3>{{word}}</h3>
    <input type="text" v-model="str" />
  </div>
</template>
<script>
export default {
  props: {
    word: {
      type: String,
      default: '',
    },
  },
  data() {
    return {
      str: '',
    }
  },
  watch: {
    str(newVal, oldVal) {
      // 在监听你使用update事件来更新word,而在父组件不需要调用该函数
      this.$emit('update:word', newVal);
    }
  }
}
</script>

•3、在子组件中拷贝一份副本

子组件中

export default {
  props: {
    // 已经选中的
    checkModalGroup: {
      type: Array,
      default: [],
      required: false,
    }
  },
  data() {
    return{
      copyCheckModalGroup: this.checkModalGroup, // 选中的
    }
  },
  methods: {
    // 一个一个的选择
    checkAllGroupChange(data) {
      // 把当前的发送给父组件
      this.$emit('updata', data);
    },
  },
  watch: {
    checkModalGroup(newVal, oldVal) {
      this.copyCheckModalGroup = newVal;
    }
  }
}

父组件中直接更新传递给子组件的数据就可以

// 更新子组件数据
roleCheckUpdata(data) {
  this.roleGroup = data;
},
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue中,子组件组件传值有几种常用的方式: 1. 使用事件:子组件可以通过`$emit`方法触发一个自定义事件,并将需要传递的数据作为参数传递给组件组件可以在子组件上监听该事件,并在相应的方法中接收传递的数据。 子组件中: ```vue <template> <button @click="sendData">传递数据</button> </template> <script> export default { methods: { sendData() { this.$emit('customEvent', 'Hello from child component'); } } } </script> ``` 组件中: ```vue <template> <div> <child-component @customEvent="handleCustomEvent"></child-component> <p>{{ receivedData }}</p> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { receivedData: '' } }, methods: { handleCustomEvent(data) { this.receivedData = data; } } } </script> ``` 2. 使用`v-model`指令:`v-model`指令可以在组件之间实现双向数据绑定,子组件可以通过修改绑定的属性值,将数据传递给组件。 子组件中: ```vue <template> <input v-model="message"> <button @click="sendData">传递数据</button> </template> <script> export default { data() { return { message: '' } }, methods: { sendData() { this.$emit('customEvent', this.message); } } } </script> ``` 组件中: ```vue <template> <div> <child-component @customEvent="receivedData = $event"></child-component> <p>{{ receivedData }}</p> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { receivedData: '' } } } </script> ``` 这些是Vue中子组件组件传值的常用方法。你可以根据具体的需求选择适合的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GY程序源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值