К примеру есть компонент
Vue.component('News', {
props: {
data: {
type: Object,
default: function() {
return {
items: []
}
}
}
},
created() {
console.log('created');
return axios.get('/news/items')
.then((response) => {
console.log('data fetched');
this.data = response.data.News;
})
.catch(function(error) {
return Promise.reject(error.status);
});
},
render: function(createElement) {
console.log('render');
console.log(this.data.items);
}
});
Выполнив данный код получим:
created
render
undefined //console.log(this.data.items);
data fetched
render
(6) [{…}, {…}, {…}, {…}, {…}, {…}, __ob__: io] //console.log(this.data.items);
Рендер отработал дважды, первый раз не дожидаясь данные от ajax запроса. Так собственно как заставить отработать его только после получения этих самых данных ? Т.е. чтобы стало так:
created
data fetched
render
Т.к. это компонент лучше все данные передовать в нутри компонента в
props:{}
а не
data(){}
created(),mounted() и другие - будут вызывать все методы, которые завязаны на "цикле жизни" экземпляра -> компонента при его изменении, монитровании и т.д, и описанные в его "теле".
потому, лучше используйте
computed: {}
Пример:
Vue.component('News', {
data() {
return {
items: []
}
},
computed: {
getNews(){
return axios.get('/news/items')
.then((response) => {
return response.data.News.items;
})
.catch(function(error) {
return Promise.reject(error.status);
});
}
},
render: function(createElement) {
console.log('render');
}
});
И в нутри тела нужного тега делаем манипуляцию
<div v-for="(item, index) in getNews"> {{ item }}</div>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Заинтересовалась тема ботовМожно ли на JS написать например instagram-бота? Функции спама в сообщениях не интересуют
Есть табличка, нужно при наведении курсора, чтобы подсвечивало столбец и строкуСо строкой получилось, помогите, пожалуйста, подсветить и столбец