Событие выброса Vue.js из дочернего компонента не перехвачено

1

У меня есть дочерний компонент, который извлекает некоторые данные с моего сервера, перед извлечением я меняю статус загрузки на 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 значения, и я вижу, что этот метод называется только один раз.

  • 0
    Важные замечания: во-первых, вы используете this.$emit() .then() контексте .then() . Вы можете столкнуться с проблемами, когда this ссылается на контекст, отличный от экземпляра Vue. Попробуйте сделать что-то вроде var this_vue_instance = this; перед входом в Promise , затем используйте this_vue_instance.$emit() . Что касается ваших проблем с захватом излучения, я сам не проверял это, но, возможно, использование двоеточия в ваших событиях вызывает проблемы? Я бы попытался исключить его как быстрый тест, чтобы убедиться, что он не противоречит синтаксису.
  • 0
    Он использует синтаксис стрелки, который автоматически связывает это с внешней областью видимости. Двоеточие в событиях не будет проблемой, потому что само Vue фактически использует это для своих собственных событий в .sync Vue в одной из последних версий. Какую версию Vue вы используете? Редактировать: ключ атрибута, имеющий двоеточие, может быть проблемой.
Показать ещё 5 комментариев
Теги:
vue.js

1 ответ

1

Я решил проблему, используя v-show вместо v-if в моем шаблоне.

<loading
  v-show="isLoading"
  :loadingMessage="loadingMessage"
  :isGiphy="true">
</loading>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню