Использую хранилище Vuex, чтобы отфильтровать новости по автору. Вот основные элементы:
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
news: null,
author_id:'all',
page_count:1
},
getters: {
NEWS: state => {
return state.news;
},
AUTHOR: state => {
return state.author_id;
}
},
mutations: {
SET_NEWS: (state, payload) => {
state.news = payload;
},
SET_AUTHOR: (state, payload) => {
state.author_id = payload;
}
},
actions: {
GET_NEWS: async (context, author_id='all') => {
let data = await axios.get('http://news/author_'+author_id).then(response => {return response.data});
context.commit('SET_NEWS', data);
},
GET_AUTHOR: async (context,author_id) => {
context.commit('SET_AUTHOR', author_id);
}
}
});
const app = new Vue({
el: '#content',
store,
data: {
selected_author: 'all'
},
mounted() {
this.$store.dispatch('GET_NEWS','all');
},
methods:{
async onGetNews () {
await this.$store.dispatch('GET_NEWS',this.selected_author);
console.log(this.$store.getters.NEWS.length);
}
}
});
При вызове метода onGetNews в консоли пишет: Error in render: "RangeError: Invalid array length", а длину массива выдает как undefined. Если вызвать в onGetNews():
console.log(this.$store.getters.NEWS)
то выводит объект:
{__ob__: Observer}
12: (...)
13: (...)
__ob__: Observer {value: {…}, dep: Dep, vmCount: 0}
get 12: ƒ reactiveGetter()set 12: ƒ reactiveSetter(newVal)
get 13: ƒ reactiveGetter()set 13: ƒ reactiveSetter(newVal)
__proto__: Object
Почему не определяет длину этого объекта?Как определить?
Вы уж определитесь, длину чего вы хотите получить. Длину объекта или длину массива?
Предполагаю что у вас все таки там живет объект, количество ключей у которого вы можете получить Object.keys(yourObject).length
; вы же пытаетесь посмотреть свойство объекта length, которого конечно же не существует.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
хочу передать переменную windowglobalVar из функции(функция меняет значение переменной при наведении на элемент), но не получается не могу понять...