#javascript #vue.js #vue-component #bootstrap-vue
#javascript #vue.js #vue-компонент #bootstrap-vue
Вопрос:
У меня есть Vue Bootstrap SPA со следующей структурой:
- макет
- панель навигации
- хлебная крошка
- вид маршрутизатора
- компонент
- некоторый контент
Я бы хотел, чтобы я component
ввел подменю в панель навигации родителя. Например:
export default {
name: 'Component',
data() {
return {
menu: [
'Item': {
href: '#'
}
]
}
},
mounted() {
parent.menu.addItem(this.menu)
}
}
Возможно ли сделать что-то подобное?
Здесь верхний макет:
<template>
<div>
<navbar :menu="menu"></navbar>
<router-view></router-view>
</div>
</template>
<script>
import NavBar from './navbar'
export default {
components: {
navbar: NavBar
},
data() {
return {
menu: [
{
text: "Foo",
href: "/foo",
},
{
text: "Bar",
href: "#",
},
],
};
},
};
</script>
Комментарии:
1. пожалуйста, поделитесь кодом родительского компонента
2. Хотя это может сработать, вы можете попробовать использовать
$emit
, с или без шины событий, чтобы уведомить, что родительский элемент должен вставить подменю.3. @BoussadjraBrahim Я добавил немного кода
4.
menu: [ 'Item': { href: '#' } ]
недопустимый синтаксис, который вы должны выполнитьmenu: [{ href: '#' } ]
Ответ №1:
Вы могли бы передать событие родительскому компоненту, например :
data() {
return {
menu: [
{
href: '#'
}
]
}
},
mounted() {
this.$emit('emit-menu',this.menu)
}
в родительском :
<template>
<navbar :menu="menu" @emit-menu="addItem"></navbar>
<router-view></router-view>
</div>
</template>
<script>
import NavBar from './navbar'
export default {
components: {
navbar: NavBar
},
methods:{
addItem(menu){
this.menu=[..this.menu,...menu]
}
},
data() {
return {
menu: [
{
text: "Foo",
href: "/foo",
},
{
text: "Bar",
href: "#",
},
],
};
},
};
</script>