将 class 添加到组件 Vue.js 中的 nabar 模态
Add a class to a nabar modal in a component Vue.js
我想知道如何将 class 添加到导航栏组件中的模式?我的导航栏在 App.vue 中,我想创建一条消息,在我单击它时将 class“处于活动状态”添加到我的导航栏中的模态。但是我找不到方法..
谢谢
通常当你有 parent -> child
关系时,你可以使用 events
。在这种情况下,由于您有两个未(直接)链接的组件,因此您有两个选择。
使用store(通常用于你的应用比较大的情况)
您可以使用 vuex 来拥有一个拥有全局状态的中心位置。一个简单的例子是:
store/main.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
isModalOpen: false
},
getters: {
isModalOpen => (state) => state.isModalOpen,
},
mutations: {
setIsModalOpen (state, isOpen) {
state.isModalOpen = isOpen;
}
}
})
然后您可以像这样访问组件中的商店:
<template>
<navbar :class="[isNavBarOpen ? "is-active" : ""]" />
</template>
export default {
computed: {
isNavBarOpen () {
this.$store.getters['isModalOpen']
}
}
}
Event bus(通常用于你有一个小应用程序并且不需要全局状态管理器的情况)
阅读有关 EventBus 的更多信息here。
您可以创建一个简单的 EventBus
services/eventBus.js
import Vue from 'vue';
const export EventBus = new Vue();
然后在模式打开时在您的组件上您可以执行以下操作:
// @ -> is an alias to your root folder. Most projects scafolded by Vue CLI has this by default
import {EventBus} from "@/services/eventBus"
export default {
methods: {
openStore: () => {
// your logic to open modal
EventBus.$emit('modal-open');
}
}
}
然后在你的 App.vue
上你只听这个事件
App.vue
<template>
<navbar :class="[isModalOpen ? "is-active" : ""]" />
</template>
// @ -> is an alias to your root folder. Most projects scafolded by Vue CLI has this by default
import {EventBus} from "@/services/eventBus"
export default {
data() {
return {
isModalOpen: false,
}
},
created() {
EventBus.$on('modal-open', this.onModalOpen);
},
methods: {
onModalOpen() {
this.isModalOpen = true;
}
}
}
您将选择哪个取决于我们的应用程序结构,以及您是否认为它足够复杂以使用中央状态管理 (vuex)。
代码中可能包含一些错误,但主要思想是存在的。
我想知道如何将 class 添加到导航栏组件中的模式?我的导航栏在 App.vue 中,我想创建一条消息,在我单击它时将 class“处于活动状态”添加到我的导航栏中的模态。但是我找不到方法..
谢谢
通常当你有 parent -> child
关系时,你可以使用 events
。在这种情况下,由于您有两个未(直接)链接的组件,因此您有两个选择。
使用store(通常用于你的应用比较大的情况)
您可以使用 vuex 来拥有一个拥有全局状态的中心位置。一个简单的例子是:
store/main.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
isModalOpen: false
},
getters: {
isModalOpen => (state) => state.isModalOpen,
},
mutations: {
setIsModalOpen (state, isOpen) {
state.isModalOpen = isOpen;
}
}
})
然后您可以像这样访问组件中的商店:
<template>
<navbar :class="[isNavBarOpen ? "is-active" : ""]" />
</template>
export default {
computed: {
isNavBarOpen () {
this.$store.getters['isModalOpen']
}
}
}
Event bus(通常用于你有一个小应用程序并且不需要全局状态管理器的情况)
阅读有关 EventBus 的更多信息here。
您可以创建一个简单的 EventBus
services/eventBus.js
import Vue from 'vue';
const export EventBus = new Vue();
然后在模式打开时在您的组件上您可以执行以下操作:
// @ -> is an alias to your root folder. Most projects scafolded by Vue CLI has this by default
import {EventBus} from "@/services/eventBus"
export default {
methods: {
openStore: () => {
// your logic to open modal
EventBus.$emit('modal-open');
}
}
}
然后在你的 App.vue
上你只听这个事件
App.vue
<template>
<navbar :class="[isModalOpen ? "is-active" : ""]" />
</template>
// @ -> is an alias to your root folder. Most projects scafolded by Vue CLI has this by default
import {EventBus} from "@/services/eventBus"
export default {
data() {
return {
isModalOpen: false,
}
},
created() {
EventBus.$on('modal-open', this.onModalOpen);
},
methods: {
onModalOpen() {
this.isModalOpen = true;
}
}
}
您将选择哪个取决于我们的应用程序结构,以及您是否认为它足够复杂以使用中央状态管理 (vuex)。
代码中可能包含一些错误,但主要思想是存在的。