Я понял, является ли это оптимальным решением для моей проблемы, можно только догадываться.
Похоже, что дочерние реквизиты не поднимаются автоматически родительским элементом при передаче по Vue Router. Поэтому, когда компоненты создаются / внедряются динамически, каждый из них вызывает мое настраиваемое событие childinit, которое отправляется обратно в представление маршрутизатора, определенное в родительском элементе (Layout). Я устанавливаю локальную переменную в родительском элементе в значение испускаемого дочернего элемента, а затем привязываю к нему класс.
const router = new VueRouter({
routes: [
{
path: '/',
component: Layout,
children: [
{
path: '',
component: Homepage,
props: { cssClass: 'home' },
},
{
path: '/helloworld',
component: HelloWorldPage,
props: { cssClass: 'helloworld' }
}
]
}
]
});
Мой компонент макета:
<template>
<div class="container" v-bind:class="className">
<router-view v-on:childinit="onChildInit"></router-view>
</div>
</template>
<script>
export default {
name: 'Layout',
props: ['cssClass'],
data() {
return {
className : ''
}
},
methods: {
onChildInit( value ){
this.className = value;
}
}
}
</script>
Компонент "Моя домашняя страница":
export default {
name: 'Homepage',
props: ['cssClass'],
created() {
this.$emit('childinit', this.cssClass);
}
}
Компонент HelloWorld также излучает, возможно, созданный метод не нуждается в репликации; возможно, вам стоит посмотреть, можете ли вы расширить базовый компонент, который всегда будет выдавать init для обоих компонентов.