【问题标题】:Update parent components from child component in Vue.js从 Vue.js 中的子组件更新父组件
【发布时间】:2019-10-10 00:55:17
【问题描述】:

我有一个使用父组件的主组件,有一个使用 v-bind:is="componentName" 的动态组件,就像:

父模板:

<li class='list-inline-item g-mx-4 g-mt-10'>
  <component v-bind:is="componentName"></component>
</li>

和代码:

 export default {

    data: function(){
             return  {
               componentName : "componentA"
             },
     },
    components: {
        componentA: {
            template : "<div>A</div>" 
        },
        componentB: {
          template : "  <div>B</div>"
        }
     }

我想切换组件以显示从子组件向 componentName 发送新值,但我不确定是否必须使用 emit 或 watch 或...?

我想在没有 vuex 的情况下这样做。

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    是的,使用发射。 在您的父组件中执行以下操作:

    <child-component @custom_event='methodName' />
    

    并且在子组件的一个方法中:

    this.$emit('custom_event')
    

    【讨论】:

    • 谢谢洛伊克!我已经使用 emit 更新了我的脚本,并且效果很好!简单但很有帮助!
    【解决方案2】:

    按照 Loric 的建议,我使用 emit 解决了这个问题。

    我的新父组件现在是:

       <li class='list-inline-item g-mx-4 g-mt-10'>
           <component v-bind:is="componentName"  @custom_event='updateTest'></component>
       </li>
    

    它有一个类似的方法:

     methods: {
            updateTest() {
                const v = document.querySelector('meta[name="login-status"]').getAttribute("content");
                this.componentName =  (v!="") ? "componentLoggedOn" : "componentLoggedOff";
            },
        },
    

    然后我向 componentA 组件(内联创建的)添加了一个新方法:

    this.$emit('custom_event', param);

    注意:param 没有被使用,只是以防万一......

    【讨论】:

    • 请注意,您可以将“custom_event”名称替换为任何名称。例如,我有一个 ajax 表单组件,它发出“提交”和“响应”。此外,如果您使用v-bind,则应使用v-on 保持一致:v-bind:is="componentName" v-on:custom_event='updateTest' 或短版本::is="componentName" @custom_event='updateTest'
    • 在全球范围内,您还缺少有关 vuejs 的一些重要内容。你不应该检查这样登录的人的状态。 login_status 可能是您的子组件中的一个变量,这不是最佳的。它也可以是 vue-x 中的一个变量。或者它甚至可以是您的视图实例的全局变量。
    • 谢谢@Loïc。我同意你的看法。我是 vue 的新手,我正在做一个蓝图项目。我很快就会在我的项目中引入 Vuex。
    猜你喜欢
    • 2017-10-22
    • 1970-01-01
    • 2023-02-20
    • 2021-02-10
    • 2019-03-11
    • 1970-01-01
    • 2019-12-04
    • 2018-04-18
    • 2019-02-19
    相关资源
    最近更新 更多