У меня есть дочерний компонент, который извлекает некоторые данные с моего сервера, перед извлечением я меняю статус загрузки на true, и я хочу установить его в false после завершения выборки. Поэтому я делаю что-то подобное в своем дочернем компоненте:
mounted() {
this.$emit('update:loadingMessage', 'Loading version options from Artifactory...');
this.$emit('update:isLoading', true);
this.fetchVersions();
},
methods: {
fetchVersions() {
const promises = [
this.$http.get('${process.env.API_URL}/version/front'),
this.$http.get('${process.env.API_URL}/version/back'),
];
Promise.all(promises)
.then((values) => {
// Do some stuff
})
.then(() => {
this.$emit('update:isLoading', false);
})
.catch(requestService.handleError.bind(this));
},
},
И в моем родительском компоненте я слушаю это событие следующим образом:
<version-selector
:form="form"
@update:loadingMessage="updateLoadingMessage"
@update:isLoading="updateLoadingStatus"
:isSnapshotVersion="isSnapshotVersion">
</version-selector>
Наконец, в updateLoadingStatus
я установил значение isLoading
равным true
или false
.
updateLoadingMessage(message) {
this.$log.debug(message);
this.loadingMessage = message;
},
updateLoadingStatus(status) {
this.$log.debug(status);
this.isLoading = status;
},
Это полезно для отображения или loading
моего компонента loading
:
<loading
v-if="isLoading"
:loadingMessage="loadingMessage"
:isGiphy="true">
</loading>
Моя проблема заключается в том, что первая Испустите работает и isLoading
установлено значение true
, а второй не работает и моя isLoading
стоимость пребывания, чтобы true
навсегда... В моем методе updateLoadingStatus
я вхожу в status
значения, и я вижу, что этот метод называется только один раз.
Я решил проблему, используя v-show
вместо v-if
в моем шаблоне.
<loading
v-show="isLoading"
:loadingMessage="loadingMessage"
:isGiphy="true">
</loading>
this.$emit()
.then()
контексте.then()
. Вы можете столкнуться с проблемами, когдаthis
ссылается на контекст, отличный от экземпляра Vue. Попробуйте сделать что-то вродеvar this_vue_instance = this;
перед входом вPromise
, затем используйтеthis_vue_instance.$emit()
. Что касается ваших проблем с захватом излучения, я сам не проверял это, но, возможно, использование двоеточия в ваших событиях вызывает проблемы? Я бы попытался исключить его как быстрый тест, чтобы убедиться, что он не противоречит синтаксису..sync
Vue в одной из последних версий. Какую версию Vue вы используете? Редактировать: ключ атрибута, имеющий двоеточие, может быть проблемой.