【问题标题】:VueJS child to parent boolean value for hide componentVueJS子到父隐藏组件的布尔值
【发布时间】:2020-06-12 07:46:19
【问题描述】:

大家好,感谢您的帮助:)

上下文: 在我的孩子中,如果用户单击,我想将布尔值传递给父级以隐藏父级中的组件

在我的子组件中(name : connexionDesktop):

<button v-on:click="$emit(childMessage)"> Start </button>

data () {
  return { 
    childMessage: true
  }
}

在我尝试的父母中:

<connexionDesktop v-if="fromChild == false " v-on:childToParent="childMessage"> </connexionDesktop>


data () {
    fromChild:false
}


methods: {
    childMessage (value) {
       alert('from child' + value );
       this.fromChild = value
    }
}

但这不起作用...我想我是个菜鸟:D 我无法从孩子向父母发送消息^^""

你能帮帮我吗?非常感谢

【问题讨论】:

    标签: javascript vuejs2 parent-child


    【解决方案1】:

    正如the docs on $emit here 中所述,第一个参数是自定义事件名称。

    你可以这样做:

    <button v-on:click="$parent.$emit('childToParent', childMessage)"> Start </button>
    
    data () {
      return { 
        childMessage: true
      }
    }
    

    在父级中:

    <connexionDesktop v-if="fromChild == false " v-on:child-to-parent="childMessage"> </connexionDesktop>
    
    ...
    
    data () {
        fromChild:false
    }
    
    
    methods: {
        childMessage (value) {
            alert('from child' + value );
            this.fromChild = value
        }
    }
    
    ...
    
    

    【讨论】:

      【解决方案2】:

      $emit 方法的第一个参数应该是事件名称。所以你的代码应该看起来像这样更好:

      // child component
      <template>
       <button v-on:click="handleClick"> Start </button>
      </template>
      
      <script>
      export default {
         data () {
           return { 
            childMessage: true
           }
         },
         methods: {
          handleClick() {
            this.$emit('update:parent', this.childMessage)
          }
        }
      }
      
      
      </script>
      
      

      然后在父组件中,您侦听事件并将子发出的值传递给父组件的本地值,如下所示:

      <template>
         <connexionDesktop v-if="fromChild == false" @update:parent="fromChild = $event"> 
         </connexionDesktop>
      </template>
      
      <script>
      export default {
         data () {
          return {
           fromChild: false
          }
         },
      }
      </script>
      

      【讨论】:

      • 真的,我尝试了 Kelvin 的答案,非常完美;)
      猜你喜欢
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 2023-01-18
      • 2018-09-14
      • 2019-10-13
      • 2019-07-24
      • 2022-08-02
      • 2021-08-30
      相关资源
      最近更新 更多