Nuxt 2.15.6; 我想通过在我的根布局中动态切换菜单组件来切换我的菜单组件的布局。
default.vue
<template>
<component :is="navLayout"></component>
<Nuxt :navLayout="navLayout = $event" />
</template>
data() {
return {
navLayout: "default"
};
},
在 的“子”组件中,我的页面例如。 login.vue (/login)我$emit
一个事件;
...
import nav2 from "@/layouts/nav2";
...
created() {
this.$emit("navLayout", nav2);
},
现在看来是 <Nuxt>
组件无法捕获事件。我还尝试调用 <Nuxt @navLayout="test()" />
方法。
如何避免this.$root.$emit(...);
和
login.vue
this.$root.$on("navLayout", navLayout => {
this.navLayout = navLayout;
});
在default.vue
?
答案 0 :(得分:2)
也许我没有正确理解您的问题,但在我看来,您正在尝试自己做布局的目的。这意味着您将使用用于登录的菜单组件、默认布局等创建布局,如下所示:
登录.vue
<template>
<LoginMenu>
<Nuxt/>
</template>
default.vue
<template>
<DefaultMenu>
<Nuxt/>
</template>
在您的页面上,您会:
export default {
layout: login
}
然后将加载带有登录菜单组件的布局。在所有其他页面上,它将加载默认菜单。
答案 1 :(得分:1)
编辑:这个答案很好用,因为看起来你现在不能这样做:https://github.com/nuxt/nuxt.js/issues/8122#issuecomment-709443008
在子组件中
<button @click="$nuxt.$emit('eventName', 'nice payload')">nice</button>
在默认布局上
<script>
export default {
created() {
this.$nuxt.$on('eventName', ($event) => this.test($event))
},
methods: {
test(e) {
console.log('test ok >>', e)
},
},
}
</script>
在 Nuxt
上设置监听器本身不起作用。
<Nuxt @navLayout="navLayout = $event" :navLayout="navLayout" />
我可以看到事件发生并且侦听器插入到 <nuxt></nuxt>
但它没有触发侦听器的任何方法...
PS:至少适用于 <nuxt-child></nuxt-child>
。