【问题标题】:Vue - Child selection triggers parent methodVue - 子选择触发父方法
【发布时间】:2019-07-19 06:33:33
【问题描述】:

我正在尝试在下拉项更改时调用父方法。这个概念看起来像这样:

父.vue

<template>
  <child ref="someRef">
</template>
...
methods: {
  doSomething() {
    // use someRef.selectedItems and variables in the parent.vue class to perform logic
  },
}

Child.vue

<template>
  <v-select v-model="selectedItems" @change="doSomething" />
<template>

如何正确地将其连接在一起,以便子项中的下拉选择触发父项方法?这是否是 emit / vuex / 或其他东西的明确案例?

【问题讨论】:

    标签: vue.js


    【解决方案1】:

    我会在这里使用发射。 (至少我不会为了这个问题而添加 Vuex,尽管我通常在几乎每个应用程序中都使用它。)

    在您的子组件的 doSomething 处理程序中,使用所选值发出一个事件:

    this.$emit('selected', value)

    在你的父组件中,连接一个监听子事件:

    &lt;child @selected="onSelected"&gt;

    onSelected(value) 添加到您的方法中。每当子组件发出事件时都会调用它。

    【讨论】:

    • 嗯,由于某种原因,当我从 onSelected 内部控制台记录所选内容时,这似乎总是落后 1
    • 如果我在父级中有 n 个 child.vue 文件,vuex 会是一个更明智的选择吗?换句话说,我根据多个下拉菜单在父级中执行过滤器?还是发出仍然是要走的路?
    • 仅供参考,使用'@input'按预期工作,而使用@change'似乎落后1
    • @ekjcfn3902039 关于 Vuex 的使用:这真的是一个品味问题。出于这个特定目的,我仍然会反对它:使用商店来分发子值意味着您将该组件强烈耦合到它在应用程序中的位置。如果组件应该在另一个上下文中重用,那就有问题了。此外,测试“纯”组件(没有副作用,例如更改商店)要简单得多。
    • 感谢您的反馈!
    猜你喜欢
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 2018-10-27
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多