javascript - vuejs 从子组件更新父数据

标签 javascript vue.js vue-component

我开始玩 vuejs (2.0)。 我构建了一个包含一个组件的简单页面。 该页面有一个带有数据的 Vue 实例。 在那个页面上,我注册了组件并将其添加到 html 中。 该组件有一个 input[type=text]。我希望该值反射(reflect)在父级(主 Vue 实例)上。

如何正确更新组件的父数据? 从父级传递绑定(bind)的 prop 是不好的,并且会向控制台抛出一些警告。他们的文档中有一些内容,但没有用。

最佳答案

双向绑定(bind)在 Vue 2.0 中已被弃用,取而代之的是使用更加事件驱动的架构。一般来说, child 不应该改变它的 Prop 。相反,它应该 $emit事件并让父级响应这些事件。

在您的特定情况下,您可以使用带有 v-model 的自定义组件。这是一种特殊的语法,允许接近双向绑定(bind)的东西,但实际上是上述事件驱动架构的简写。您可以在这里阅读 -> https://v2.vuejs.org/v2/guide/components.html#Form-Input-Components-using-Custom-Events .

这是一个简单的例子:

Vue.component('child', {
  template: '#child',
  
  //The child has a prop named 'value'. v-model will automatically bind to this prop
  props: ['value'],
  methods: {
    updateValue: function (value) {
      this.$emit('input', value);
    }
  }
});

new Vue({
  el: '#app',
  data: {
    parentValue: 'hello'
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.js"></script>

<div id="app">
  <p>Parent value: {{parentValue}}</p>
  <child v-model="parentValue"></child>
</div>

<template id="child">
   <input type="text" v-bind:value="value" v-on:input="updateValue($event.target.value)">
</template>


文档指出

<custom-input v-bind:value="something" v-on:input="something = arguments[0]"></custom-input>

相当于

<custom-input v-model="something"></custom-input>

这就是为什么子项上的 prop 需要命名为 value,以及为什么子项需要 $emit 一个名为 input 的事件。

关于javascript - vuejs 从子组件更新父数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40915436/

相关文章:

javascript - 是否可以在 JavaScript 中创建 "weak reference"?

javascript - AngularJS ui-router 带有可选查询参数的状态

javascript - defineEmits 函数的 Vue linting 错误

javascript - 为什么vue的方法不行?

javascript - Vue CLI - 未找到 PostCSS 配置

javascript - vuejs - 如何将 Prop 和事件动态传递给动态组件

javascript - 如果帖子 ID 等于 action.payload,则增加点赞数

javascript - 当用户单击“提交”时,有没有办法将值从按钮传递到表单?

javascript - Vue v-if 在使用 interval 时不影响 Dom

javascript - 在 Vue/Javascript 中,如何使用对 this.$refs.someDynamicVariable 的动态引用