2016-11-06 4 views
2

В следующем коде:

export default { 
    props: ['note'], 
    methods: { 
     remove(){ 
      NoteRepo.remove(this.note, (err) => { 
       if (err) { 
        console.log('Should Fire') 
        this.$emit('alerted', { 
         type: 'error', 
         message: 'Failed to remove note' 
        }); 
       } 
      }) 
     } 
    } 
} 

Когда функция вызывается удалить, консоль журналы «Если огонь», но $ испускают событие не уволят. Если я перемещаю $ emit вне обратного вызова так:

export default { 
    props: ['note'], 
    methods: { 
     remove(){ 
      this.$emit('alerted', { 
       type: 'error', 
       message: 'Failed to remove note' 
      }); 

      NoteRepo.remove(this.note, (err) => { 
       if (err) { 
        console.log('Should Fire') 
       } 
      }) 
     } 
    } 
} 

Это работает. Я попытался назначить _this = this и использовать это для запуска $ emit, но без разницы.

Почему событие $ emit не срабатывает при обратном вызове?

+0

Вы не пытались использовать функцию стрелки? Я просто начал использовать vue, но, похоже, я помню, как читал в документах, что функции стрелок не привязывают контекст должным образом, когда используются в некоторых местах. – theWanderer4865

+0

Да, если я правильно понимаю, при использовании функции стрелки 'this' представляет экземпляр Vue, поэтому в этом случае функция стрелки в порядке. При этом я попытался (а также назначил '_self = this' в этом процессе), и нет никакой разницы. Я пробовал всевозможные способы псевдонимов, но не повезло. – evu

+1

Я нашел соответствующий бит здесь: http://vuejs.org/v2/guide/instance.html#Properties-and-Methods выглядит так, как функция стрелки не является обязательной для экземпляра vm. – theWanderer4865

ответ

0

Так получилось, что это было что-то в NoteRepo, вызывающем проблему. В частности, обратный вызов события firebase.

constructor() { 
     super(); 

     // Initialize Firebase 
     Firebase.initializeApp({ 
      apiKey: "xxx", 
      authDomain: "xxx", 
      databaseURL: "xxx", 
      storageBucket: "xxx", 
      messagingSenderId: "xxx" 
     }); 

     this.ref = Firebase.database().ref('notes'); 
     this.attachFirebaseListeners(); 
    } 

    attachFirebaseListeners() { 
     this.ref.on('child_added', this.onAdded, this); 
     this.ref.on('child_removed', this.onRemoved); // Removing 'this' here seems to of fixed it. 
     this.ref.on('child_changed', this.onChanged, this); 
    } 

Я не уверен, что именно не так, но это похоже на то, что он сейчас сортируется.

 Смежные вопросы

  • Нет связанных вопросов^_^