2016-01-17 5 views
1

Я пытаюсь выяснить, как отображать объект в html с помощью углового2. В ng1 я назначил переменной и дважды привязал имя переменной в html и bingo! Теперь я, кажется, не вижу никаких данных, отображаемых вообще.ng2 display object в html

Вот мой простой метод вызова:

onSubmit(value: oSearch): void { 
    console.log('you submitted value: ', value); 
    Meteor.call('methodName',value.type,value.year,value.idNumber, function(error,result) { 
     if (error) { 
     console.log('failed', error); 
     } else { 
     this.oResult = result[0]; 
     console.log('successful call', this.oResult); 
     } 
    }) 
    } 

объект печатается на консоль. Но я не могу получить его, чтобы сделать с помощью:

{{oResult}} 

oResult объявляется с использованием

oResult:Object; 

Совершенно новый для ц и NG2.

Update

Хорошо, я попытался NgZone, но это не сработало. Я получаю поведение, которого я действительно не понимаю.

} else {  
console.log('successful call', result[0].topItem); 
this.oResult = result[0]; 
console.log('successful call', this.oResult); 

Оба console.logs правильно напечатать объект, но oResult отображается в виде [объект Object]

Если я изменяю:

this.oResult.topItem = result[0].topItem 

тогда я получаю ошибку Метеор брошенную и 2-й консоли .log не печатает. Ошибка:

Exception in delivering result of invoking 'methodName': TypeError: Cannot set property 'topItem' of undefined 

Мой серверный метод отлично работает с ng1. Я пробовал синхронную версию http, но никаких изменений в поведении не произошло.

Возможно, кто-то знает учебную демонстрацию вызова метода http с использованием обновленного angular2-meteor, который я могу разветвить?

+0

http://stackoverflow.com/questions/35241724/ng2-update-template-after-making-a-simple-meteor-call – shotleybuilder

ответ

0

Угловое не распознает изменение значения, если поля обновляются кодом, находящимся вне зоны углов. Введите zone: NgZone и запустите код в пределах zone.run(...). Также может быть достаточно инициализировать библиотеку в пределах Angular, чтобы она использовала асинхронный API, обработанный Angular, который уведомляет Angular о возможных изменениях.

constructor(private zone: NgZone) { 
    } 

    onSubmit(value: oSearch): void { 
    console.log('you submitted value: ', value); 
    Meteor.call('methodName',value.type,value.year,value.idNumber, function(error,result) { 
     if (error) { 
     console.log('failed', error); 
     } else { 
     zone.run(function() { 
      this.oResult = result[0]; 
      console.log('successful call', this.oResult); 
     }); 
     } 
    }); 
    } 

См. Также Service events do not affect template correctly для примера.