vue中子组件中传值问题

问题描述:数据列表中,点击编辑按钮,弹出弹框,如图所示,但控制台出现如下错误。

 

Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders....

子组件:

<template>
  <el-dialog :title="title" :visible.sync="dialogFormVisible">
    <el-form :model="form" :rules="rules" ref="form">
        ...
    </el-form>
    <div slot="footer" class="dialog-footer">
      <el-button @click="dialogFormVisible = false">取 消</el-button>
      <el-button type="primary" @click="submit">确 定</el-button>
    </div>
  </el-dialog>
</template>

<script>
    export default {
      name: 'wordModal',
      props: {
          row: {...},
          dialogFormVisible: {
              type: Boolean,
              default: false
          },
      },
      methods: {
        ...
     }
    }
</script>

在子组件中,取消按钮直接使用<el-button @click="dialogFormVisible = false">取 消</el-button>,就会提示禁止在子组件中改变父组件的值。

所以在父组件中新增cancel的方法,子组件点击取消按钮后,发送对应事件,在父组件中改变dialogFormVisible的值。

父组件:

<template>
    <word-modal
       ...
       :dialogFormVisible="dialogFormVisible"
       @closeDialog="closeDialog"
    />
</template>

<script>
    import WordModal from './wordModal.vue';
    export default {
        components: { WordModal },
        data() {
            return {
                l...
                dialogFormVisible: false,
                ...
            }
        },
        method: {
            ...
            closeDialog() {
              this.dialogFormVisible = false;
            },
        }
    }
</script>

子组件:

<template>
    ...
      <el-button @click="cancel">取 消</el-button>
    ...
</template>

<script>
export default {
  ...
  methods: {
    cancel() {
      this.$emit('closeDialog')
    },
    ...
  },

}
</script>

  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值