【问题标题】:How to change parent data from a child component?如何从子组件更改父数据?
【发布时间】:2023-03-18 20:10:02
【问题描述】:

在进行了一些挖掘之后,似乎从孩子到父母,您应该通过发出事件来更新数据(而不是通过v-model)。这是我这样做的尝试(无济于事)。

App.vue

<template>
  <div>
    <HelloWorld :count="count" @update:count="count= $event" />
  </div>
</template>

<script>
import HelloWorld from "./components/HelloWorld.vue";

export default {
  name: "App",
  data() {
    return {
      count: 10
    };
  },
  components: {
    HelloWorld
  }
};
</script>

HelloWorld.vue

<template>
  <div class="hello">
    <input
      type="number"
      min="0"
      :value="count"
      @input="$emit('input', $event.target.value)"
      style="width:6em"
    />
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
  props: {
    count: Number
  }
};
</script>

我哪里出错了?理想情况下,我希望子组件的输入字段的更改会更改父组件的存款字段。谢谢!

【问题讨论】:

    标签: vue.js vuejs3


    【解决方案1】:

    我认为这不起作用,因为您在子组件中缺少 emits: ['update:count'] 选项,但我建议在子组件中将该道具命名为modelValue,并在父组件中使用v-model 指令而不是@update:count事件:

    <template>
      <div>
        <HelloWorld v-model="count" />
      </div>
    </template>
    
    <script>
    import HelloWorld from "./components/HelloWorld.vue";
    
    export default {
      name: "App",
      data() {
        return {
          count: 10
        };
      },
      components: {
        HelloWorld
      }
    };
    </script>
    

    HelloWorld.vue:

    <template>
      <div class="hello">
        <input
          type="number"
          min="0"
          :value="count"
         @input="$emit('update:modelValue', $event.target.value)"
          style="width:6em"
        />
      </div>
    </template>
    
    <script>
    export default {
      name: "HelloWorld",
      props: {
        modelValue: Number
      },
      emits: ['update:modelValue'],
    };
    </script>
    

    这允许您创建一个custom input

    【讨论】:

    • 这行得通,但是从孩子到父母的值最终是一个字符串而不是一个数字,知道为什么吗? (初始值:count=10,变化/递增后count="11")
    • 试试@input="$emit('update:modelValue', Number($event.target.value))"
    • 我不确定v-model.number="count" 是否有效
    猜你喜欢
    • 2019-06-05
    • 2017-05-30
    • 2016-12-21
    • 2021-04-25
    • 2019-02-17
    • 2016-11-24
    • 2017-04-16
    相关资源
    最近更新 更多