4
Auth在谷歌中使用Angular2。服務事件不會正確影響模板
首先,在HTML,我打開谷歌API庫:
//index.html
//...
<script>
var googleApiClientReady = function() {
ng2Gauth.googleApiClientReady(gapi);
}
</script>
<script src="https://apis.google.com/js/client.js?onload=googleApiClientReady"></script>
//...
經過Angular2服務我處理谷歌身份驗證數據併發出事件通知組件如果谷歌API準備:
//google auth service .ts
import {Injectable, EventEmitter} from 'angular2/core';
@Injectable()
export class GoogleAuthService {
isGoogleApiReady: EventEmitter<boolean>;
constructor() {
window['ng2Gauth'] = this; //is it correct way?
this.isGoogleApiReady = new EventEmitter;
}
//it fires from outside of Angular scope
public googleApiClientReady(gapi){
this.gapi.auth.init(() => {
this.isGapiReady.emit(true);
})
};
//...
在這裏,在組件中,我選中複選框,或者禁用按鈕,並執行其他模板。
//gauth component
import {Component} from 'angular2/core';
import {GauthService} from './gauth.service';
@Component({
selector: 'gauth',
template: `<input type="checkbox" [(ngModel)]="isReady"> Api ready
export class GauthComponent {
constructor (private _gauthService:GauthService) {
_gauthService.isGoogleApiReady.subscribe((flag) => this.gapiOnReady(flag))
public isReady = false
gapiOnReady(flag: boolean) { //it fires,
this.isReady = true; //but not affect on template correctly
console.log('gapi loaded')
this._gauthService.checkAuth();
}
}
看起來都應該工作,但有奇怪的錯誤在瀏覽器(Chrome瀏覽器,FF) - 如果啓用瀏覽器的標籤上的網頁加載 - 它看起來像什麼也沒發生 - 複選框沒有檢查,如果我打開其他標籤頁瀏覽器加載頁面的時候,一切正常。
如何解決?它是錯誤的方式嗎?
同樣,它沒有幫助, – ivanesi
謝謝,因爲gapi.auth.init它的工作原理,但有gapi.auth.authorize。它在回調中返回auth結果,並且在該回調中,我需要發出事件。在這裏我仍然有同樣的問題。 – ivanesi
我需要看代碼。我自己不使用這個庫。 –