v-on 指令可以直接修改父级的 data() 属性 吗?

Can a v-on directive directly modify a data() property of the parent?

我有一个将 Vue 组件作为子组件的应用程序。

组件通过 this.$emit(下面的 numberchnaged)将数据传回父级,由 v-on(或 @)在父级捕获) 指令,依次触发一个方法。

此方法然后更新父项的 data() 属性:

<template>
      (...)
      <Users @numberchanged="doNumCh"></Users>
      (...)
</template>

<script>
(...)
export default {
  components: {
          Users
  },
    data() {
      return {
          u: "hello"
      }
    },
    methods: {
      doNumCh(value) {
          this.u = value
      }
    }
}
</script>

此解决方案有效,但对于仅用 <Users> 发回的内容更新 this.u 来说非常冗长。

有没有办法在 <Users> 标签 中进行更新,比如

<Users @numberchanged="u=theValueReturedByUsers"></Users>

我的问题是我不知道如何提取theValueReturedByUsers,我只能在方法中找到它作为value(在我的上面的例子)。

可通过 $event.

访问负载

对于上面的代码,解决方案因此是

<Users @numberchanged="u=$event"></Users>

您可以这样做(无需在父级中编写方法)使用变量 $event,其中包含从子组件返回的值(对象或文字变量):

 <users @numberchanged="{u=$event}"></users>

在功能上,您希望组件具有 v-model 行为。 Vueprovides for that。所以你可以说

<template>
      (...)
      <Users v-model="u"></Users>
      (...)
</template>

这是一个整洁的视图,只要您的 Users 组件(旁注:您应该始终 have a hyphen in custom component names)采用 value 参数并且 $emits输入事件。

另请参阅 v-bind.sync 以使用 value 以外的道具。