Вероятно, то, что вы пытаетесь сделать, не имеет особенно простого решения, и как бы я это сделал, это использовать элемент состояния хранилища, который устанавливается компонентом при его загрузке. Компонент зафиксировал бы мутацию в хранилище, которая изменяет элемент состояния. Затем макет будет использовать этот элемент состояния через геттер для установки URL-адреса изображения. Вот как я это закодирую. В состоянии хранилища у меня будет массив имен классов, назовем его headState и элемент, которому будет присвоено одно из названий классов, называемое headStateSelect:
//store/index.js
state: {
headState: ['blue', 'red', 'green'],
headStateSelect : ''
}
В вашем компоненте вы можете использовать выборку или асинхронную выборку, чтобы зафиксировать мутацию, которая установит headStateSelect с одним из элементов headState.
//yourComponent.vue
async fetch ({ store, params }) {
await store.commit('SET_HEAD', 1) //the second parameter is to specify the array position of the 'headState' class you want
}
и магазин:
//store/index.js
mutations: {
SET_HEAD (state, data) {
state.headStateSelect = state.headState[data]
}
}
В магазине у нас также должен быть получатель, который возвращает 'headStateSelect', чтобы наш макет мог легко его получить.
getters: {
head(state) {
return state.headStateSelect
}
}
наконец, в макете мы можем использовать свойство computed для получения нашего геттера:
//layouts/default.vue
computed: {
headElement() {
return this.$store.getters.head
}
}
и макет может использовать свойство computed для установки класса следующим образом:
//layouts/default.vue
<template>
<div :class="headElement">
</div>
</template>
Теперь div в макете будет установлен с именем класса 'red' (т.е. store.state.headState [1]), и вы можете иметь класс .red css в вашем файле макета, который стилизует его так, как вы хотите в том числе с фоновым изображением.