すべてが期待通りに機能しますが、更新するビューを取得できません。angle2の結合がgoogle oauth2約束で動作しない
ngOnInit()内のサブスクリプションは、データがストリームの下に来るたびにビューを更新すると予想します。
しかし、データは、コードthis.userを下流に来ている間=ユーザーは、ビューを更新しません:(
マイコンポーネントのコードがある...
import {Component, OnInit} from '@angular/core';
import {Subject, Observable} from 'rxjs/Rx';
import {AuthService} from '../../../services/auth.service';
import 'rxjs/add/operator/catch';
declare let auth2:any;
@Component({
selector: 'user',
templateUrl: 'build/routes/app/user/user.component.html',
styleUrls: ['build/routes/app/user/user.component.css'],
providers: [AuthService]
})
export class UserComponent implements OnInit {
private userSubject = new Subject<string>();
public user:any;
public userStream:Observable<any> = this.userSubject.asObservable().flatMap((code:any) => {
let restStream = this.authService.signIn(code)
.map((response:any) => {
return JSON.parse(response._body);
}).catch((err:any) => {
return Observable.throw(err);
});
return restStream;
}).publish().refCount();
constructor(public authService:AuthService) {
}
ngOnInit() {
this.userStream.subscribe((user:any) => {
console.log(user); // user is set
this.user = user; // this does not update the view :(
});
}
public googleSignIn() {
auth2.grantOfflineAccess({'redirect_uri': 'postmessage'}).then((authResult:any) => {
this.userSubject.next(authResult.code);
});
}
}
図であります単に...
<button (click)="googleSignIn()">Google Sign In</button>
<div>USER = {{user | json}}</div>
にはどうすればAngular2ビューを更新するのですか?
注:グローバル宣言auth2はグローバルGoogle OAuth2を参照しています - ありがとう
。これはうまくいかず、最終的な解決策では使用されませんでしたが、あなたのsetTimeoutのアイデアは私に正しい道を考えるようになり、私のアプローチの転換点になりました。 – danday74