【问题标题】:Passing an event to a parent component with Nuxt.js使用 Nuxt.js 将事件传递给父组件
【发布时间】:2020-01-15 19:39:34
【问题描述】:

我有一个简单的标题组件,其中包含一个可点击的汉堡包,我想将汉堡包分成一个单独的组件,但是当我这样做时点击事件不再起作用,我想我需要某种布尔道具但可以'找不到解释,或者我正在寻找错误的东西。

这是一个单独的组件

/components/Header.vue

<template>
  <div class="--row header__wrapper" :class="{active: menuClose}">
    <button class="hamburger" :class="{active: menuClose}" @click="menuClose=!menuClose">
      <span></span>
      <span></span>
      <span></span>
    </button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      menuClose: false,
    };
  }
};
</script>


当分成两个组件时,以下内容不起作用,因为点击事件丢失,这是我卡住的地方。

/components/Header.vue

<template>
<div class="--row header__wrapper" :class="{active: menuClose}">
        <Hamburger/>
</div>
</template>

<script>
import Hamburger from "~/components/Hamburger.vue";
  export default {
    components: {
      Hamburger
    }
  }
};
</script>

/components/Hamburger.vue

<template>
  <button class="hamburger" :class="{active: menuClose}" @click="menuClose=!menuClose">
    <span></span>
    <span></span>
    <span></span>
  </button>
</template>

<script>
export default {
  data() {
    return {
      menuClose: false
    };
  }
};
</script>


【问题讨论】:

    标签: vuejs2 click vue-component nuxt.js vue-props


    【解决方案1】:

    从子组件向父组件发送事件,并通过子组件中的道具关闭菜单。 很容易实现,关注

    https://vuejs.org/v2/guide/components.html#Listening-to-Child-Components-Events

    Nuxt 与事件无关。

    编辑 我为您创建了一个示例

    https://codesandbox.io/embed/codesandbox-nuxt-v5l5m?fontsize=14

    【讨论】:

    • 感谢您的回复,我已经阅读了文档并尝试了以下内容,到目前为止没有任何乐趣,但仍然在努力。 /components/Header.vue &lt;template&gt; &lt;div class="--row header__wrapper" :class="{active: menuClose}" v-on:menuClick="menuClose=!menuClose" &gt; &lt;header class="--row header"&gt; &lt;Hamburger/&gt; &lt;/header&gt; &lt;/div&gt; &lt;/template&gt; &lt;script&gt; import Hamburger from "~/components/Hamburger.vue"; export default { components: { Hamburger }, data() { return { menuClose: false } } } &lt;/script&gt;
    • 组件/Hamburger.vue &lt;template&gt; &lt;button class="hamburger" v-on:click="$emit('menuClick')"&gt; &lt;/button&gt; &lt;/template&gt; &lt;script&gt; export default { props: { menuClick: Boolean } }; &lt;/script&gt;
    • 也试过 /components/Hamburger.vue &lt;template&gt; &lt;button class="hamburger" v-on:click="$emit('menuClick')"&gt; &lt;/button&gt; &lt;/template&gt; &lt;script&gt; export default { props: ["menuClick"], }; &lt;/script&gt;
    • 我已经添加了一个例子,请检查。
    • 感谢您,我花了几个小时阅读文档并尝试了一些事情,并且非常接近相同的解决方案,但您的示例真的很有帮助
    猜你喜欢
    • 1970-01-01
    • 2022-11-24
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多