Где вы слушаете испущенное событие в VueJS? - PullRequest
1 голос
/ 31 октября 2019

Вот настройка:

export default Vue.extend({
 name: 'Home',
 computed: {
   ...mapState('user', ['card']),
 },
 created() {
  this.fetchData();
 },
 mounted() {
  this.$once('dataLoaded', () => {
    if (!this.card) {
      this.showWarning();
    }
  });
},
watch: {
  '$route': 'fetchData'
},
methods: {
  async fetchData() {
    await Promise.all([...]);
    this.$emit('dataLoaded');
  },
  showWarning() {
    // Vue global Plugin for creating a banner
    Notify.create();
  }
 }
});

Я подключил слушателя в жизненном цикле mounted, но мне было интересно, должен ли я сделать это в created(). Похоже, что в обоих случаях он работает нормально, поэтому мой вопрос, есть ли лучшие практики или я пропустил что-то важное здесь.

Спасибо!

1 Ответ

0 голосов
/ 31 октября 2019

Вы слишком усложняете вещи. Нет необходимости в emit, потому что вы показываете нам только один компонент
Просто сделайте это так:

methods: {
  async fetchData() {
    await Promise.all([...]);
    this.myMethod()
  },
  myMethod() {
    if (!this.card) {
      this.showWarning();
    }
  }
...