【问题标题】:Function in Parent never called following an $emit from the Child父级中的函数从未在子级的 $emit 之后调用
【发布时间】:2020-10-14 00:43:12
【问题描述】:

我在子组件的 axios 帖子中包含了一个 $emit,如下所示。

 axios.post('/api/register', qdata)
  .then((response) => {
   this.$emit('userUpdated', response.data)
  })

在父组件中,我在html代码中有一个div元素包含一个v-on,它指的是$emit的userUpdated。

 <div id="username" v-on:userUpdated="nameUpddated($event)">
   <p>{{userid}}</p>
 </div>

最后,父级的脚本部分包含以下由 v-on 调用的函数。

nameUpddated: function (updatedUser) {
  this.userid = updatedUser
}

我已经验证 axios 在子组件中返回了正确的值。但是,父级中的函数永远不会被调用。

【问题讨论】:

  • div id="username" 是子组件吗?
  • 谢谢阿纳托利。不,id不对应子组件。

标签: vue.js nodes


【解决方案1】:

在您的父组件中使用 子组件名称 而不是 div

编辑:我还添加了v-if 以有条件地显示组件。

 <child-component v-if="isVisible" id="username" v-on:userUpdated="nameUpddated($event)">
   <p>{{userid}}</p>
 </child-component>

另外,您需要添加一个data 属性来有条件地显示组件(最初是隐藏的)。

   data () {
        return {
            isVisible: false
        }
    }

现在,由您决定在什么时候显示子组件。您只需将isVisible 更改为true

进行此更改后,它应该可以按预期工作。


注意:请记住在您的父组件中也正确注册子组件:

import childComponent from '@/components/childComponent'

export default {
    components: {
        childComponent
    }
}

【讨论】:

  • 谢谢雅库布。我是否需要使用子组件名称才能使 $emit 工作?子组件是一个模态窗口。如果我应用您建议的修改,模态窗口将自动显示,这是我不想要的。
  • 不,要让$emit 工作,您无需担心组件名称。您可以使用v-if v-show根据某些条件有条件地显示或隐藏组件。为此,您可能需要在父组件中使用 data 属性,例如:isVisible: false 最初设置为 false,然后按下某个按钮,您可以将其更改为 @click="isVisible=true"。之后,您将添加&lt;child-component v-if=isVisible&gt;&lt;/child-component&gt;。您可以在文档中了解更多信息:vuejs.org/v2/guide/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
  • 1970-01-01
  • 2019-08-28
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
相关资源
最近更新 更多