Я пытаюсь создать вычисленные свойства, используя данные, извлеченные с помощью функции mapGetters в vuex, но я всегда получаю undefined, пока страница / dom не загрузится полностью.
Вот пример вычисляемого свойства isRegistered, которое я использую для скрытия / отображения определенных кнопок.
computed: {
...mapGetters(['solos', 'user']),
isRegistered () {
return this.solos.registered.indexOf(this.user._id) !== -1
}
}
Вот HTML-код кнопок, использующих вычисляемое свойство isRegistered.
<a href="#" class="register-button" v-if="!isRegistered">REGISTER NOW</a>
<a href="#" class="registered-button" v-if="isRegistered">REGISTERED</a>
Я устанавливаю геттеры с помощью действия, которое я вызываю в созданной функции
created () {
this.getTournament('solos').catch(err => {})
}
Вот мое действие по установке соответствующих геттеров
getTournament: ({commit}, type) => {
return feathers.service('tournaments').find({
query: {
type: type,
status: 'registering'
}
}).then(tourney => {
commit(type.toUpperCase(), tourney.data[0])
})
}
Вот соответствующая мутация
const mutations = {
SOLOS (state, result) {
state.solos = result;
}
};
Вот соответствующий геттер
const getters = {
solos (state) {
return state.solos
}
}
Проблема, с которой я столкнулся, заключается в том, что значение изначально отображается как undefined, пока PAGE / DOM не будет полностью загружен, в результате чего .indexOf выдает следующую ошибку:
TypeError: Cannot read property 'indexOf' of undefined
Единственный способ заставить это работать - использовать оператор if для вычисляемого свойства, который проверяет, загружены ли данные состояния.
isRegistered () {
if (this.solos._id) return this.solos.registered.indexOf(this.user._id) !== -1
}
Это не похоже на то, что нужно делать. Что я делаю неправильно?