2016-01-20 2 views
2

Я пытаюсь понять, почему наблюдаемое событие не отображается в шаблоне. Я пытаюсь помочь одному из моих товарищей по работе. Он выполняет проект Electron с Angular 2 и использует JavaScript вместо TypeScript. Это боль, и, надеюсь, мы скоро преобразуем его в TypeScript.Наблюдаемое событие, не отображаемое в шаблоне Angular2

Переменная 'eventEmitter' связана в шаблоне с асинхронным каналом. У меня есть 2-секундный таймер, который испускает событие. Шаблон не отображает ничего, кроме сообщения Hello. Я поставил точки останова, и таймер стреляет, и испускания выходят. Я закодировал подписку и подтвердил, что событие выходит и может быть получено. Это комментарий сейчас. Вот мой компонент приложения:

var count = 0; 

var eventEmitter = new ng.core.EventEmitter(); 

(function(app) { 

var MessageList = 
    ng.core.Component({ 
      selector: 'message-list', 
      template: 
      '<p>Hello {{name}}</p>' + 
      '<p>{{ eventEmitter | async}}</p>' 
     }) 
     .Class({ 
      constructor: function() { 
       console.log("In MessageList"); 

       /*  eventEmitter 
       .subscribe(
       function(data) { 
       return data; 
       }, 
       function(err) { 
       console.log("EventEmitter error"); 
       }, 
       function() { 
       console.log("Completed eventEmitter"); 
       } 
       );*/ 


       setInterval(function() { 
        count++; 
        eventEmitter.emit("Got an event at " + count); 
       }, 2000) 

       this.name = "Test EventEmitter"; 
      } 
     }); 

app.StatusPage = 
    ng.core.Component({ 
      selector: 'status-page', 
      templateUrl: 'app/statuspage.html', 
      directives: [MessageList] 
     }) 
     .Class({ 
      constructor: function() { 

      } 
     }); 

})(window.app || (window.app = {})); 
+0

Вы когда-нибудь разрешали это? Я думаю, что у меня такая же проблема. – nathasm

+0

Не уверен eventEmitter может быть визуализирован так: это не похоже на тип string, number, ... Что вы видите, если вы console.log eventEmitter, объект? На этой странице документации https://angular.io/docs/ts/latest/api/core/index/EventEmitter-class.html обсуждается доступ к полезной нагрузке события с параметром $ event. Удачи. –

ответ

0

Так что я решил решить эту проблему. Проблема заключалась в том, что я получал электронное сообщение Electron в своем угловом коде 2, и система зоны не могла обрабатывать вызов из другого потока. Поскольку код не был в зоне, события не были обнаружены. Я завернул код в ngzone.