#javascript #vue.js
#javascript #vue.js
Вопрос:
Может кто-нибудь, пожалуйста, объясните мне, что произошло в этих кодах и как я могу это решить?
Я получаю данные в родительской mounted
функции и обновляю ее данные. Итак, у меня есть новый объект в дочернем элементе. Но значение свойства этого объекта пустое!
Родительский:
<template>
<div class="main-page">
<main-content v-bind:config="mainContentConfig" />
</div>
</template>
mounted(){
fetchData().then(editions => { editions.sort((e1, e2) => e1.name.toLowerCase().localeCompare(e2.name.toLowerCase()))
this.mainContentConfig.intranetEditions = [...editions];
this.mainContentConfig.currentMenuIndex = 1;
});
}
Дочерний:
mounted(){
console.log("AA==============>", this.config);
console.log("BB==============>", this.config.intranetEditions);
}
Но на консоли у меня есть:
Я обнаружил эту проблему, когда я заполняю другие данные в дочернем классе this.config.intranetEditions
массивом, который всегда пуст!
Редактировать: я тоже пробовал этот код, но никакой разницы!
[...this.config.intranetEditions]
Редактировать 2 Этот код тоже тестировался, но ничего!
console.log("AA==============>", this.config);
console.log("BB==============>", JSON.stringify(this.config.intranetEditions));
Комментарии:
1. консольные журналы объектов / массивов могут вводить в заблуждение — попробуйте
console.log("AA==============>", JSON.stringify(this.config));
и аналогично для следующей строки2. какая у вас версия vue? попробуйте прочитать это: vuejs.org/v2/api/#Vue-nextTick Я думаю, это решило бы вашу проблему с реактивностью
Ответ №1:
Дочерний компонент смонтирован, но родительская выборка еще не завершена, поэтому this.config
наблюдатель остается наблюдателем до тех пор, пока выборка не будет выполнена (поэтому then
запускается) и выполняется var.
Можете ли вы попробовать посмотреть prop config
в дочернем компоненте? затем вы увидите, когда this.config
это будет выполнено.
https://v2.vuejs.org/v2/guide/computed.html#Watchers
ОБНОВЛЕНИЕ С ПРИМЕРОМ:
дочерний компонент
watch: {
config(newValue) {
console.log("AA==============>", newValue.intranetEditions);
checkConfigValue();
},
},
methods: {
checkConfigValue() {
console.log("BB==============>", this.config.intranetEditions);
};
},
Таким образом, вы можете что-то сделать в наблюдателе с newValue
помощью, или запустить метод и использовать this.config
. В этом случае обе консоли будут печатать одно и то же.