2016-08-07 3 views
0

У меня есть простая модель, отображающая электронную почту моего пользователя, ang Я использую Google для аутентификации.Шаблон не обновлен (но модель) после аутентификации с помощью Google

Вот код, который я написал для проверки подлинности:

gapi.auth2.getAuthInstance().signIn().then((args) => { 
    this.user = { email: args.wc.hg } 
    console.log(this.user); 
}); 

console.log правильно отображает электронную почту, но шаблон не обновляется, и я до сих пор ничего не вижу в браузере: {{user?.email}}.

Еще один момент, я просто заменил проверку подлинности с помощью простого обещания:

new Promise<string>(resolve => setTimeout(() => resolve('email'), 10000)).then(data => this.user = { email: data }); 

Это работает и мой шаблон отображения email.

Я не вижу разницы между разрешением этих двух обещаний, но, очевидно, есть одно.

У вас есть идея? Заранее спасибо.

+0

вы получаете любой журнал/ошибку на консоли. Можете ли вы обернуть this.user = {} в setTimeout и посмотреть, работает ли это. Я подозреваю, что это неверно в вашем обработчике. Вы можете напечатать «typeof this» на консоли. Я думаю, это может указывать на окно –

+0

Спасибо за ваш комментарий, но это правильно относится к моему компоненту. Это то, что я проверил с насмешливым обещанием. Я думаю, что ответ micronyks ниже - это решение. – Happy

ответ

3

Это потому, что код он работает из angular2 framework.What вы можете сделать это, вы можете проверить обнаружение изменений вручную ниже кода,

import { Component, ChangeDetectorRef } from '@angular/core';  

export class MyComponent { 
    constructor(private cdr:ChangeDetectorRef) { //<----- injection 
    } 

    someMethod() { 

    gapi.auth2.getAuthInstance().signIn().then((args) => { 
     this.user = { email: args.wc.hg } 
     console.log(this.user); 

     this.cdr.detectChanges();    //<----Note this... 
    }); 

    } 
} 
+0

Хорошо, что это очень помогает. Можете ли вы объяснить, почему мы должны вызывать 'detectChanges()', если код заканчивается на Angular2? Или дайте нам ссылку? – Happy

+1

, пожалуйста, проверьте это http://blog.thoughtram.io/angular/2016/02/22/angular-2-change-detection-explained.html – micronyks

+1

В основном изменение состояния приложения может быть вызвано тремя вещами: События - нажмите, submit, ... 'XHR - Получение данных с удаленного сервера Таймеры - setTimeout(), setInterval()' Все они асинхронны. Это приводит нас к выводу, что, в основном, когда выполнялась какая-либо асинхронная операция, наше состояние приложения могло быть изменено. Это когда кто-то должен сказать Angular, чтобы обновить представление. – micronyks