Angular2绑定不适用于Google OAuth2 Promise

danday74

一切都按预期工作,但我无法更新视图。

我希望每次数据流下来时ngOnInit()内的订阅都会更新视图。

但是,当数据沿流传输时,代码this.user = 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-谢谢

阿皮·阿加瓦尔(Arpit Agarwal)

通过在subscription中添加另一个控制台日志来确认是否设置了this.user。

console.log(this.user);

我认为可以设置,但是UI不更新是您的问题。刚开始时,您可以尝试将用户设置包装为超时,并查看UI更新是否如

setTimeout( user => this.user = user, 0);

如果这样可以使您工作,那么就太早/太晚地设置变量,以至于无法检测到更改。

setTimeout这不是实现此目标的理想方法,因此我们应该以适当的方式重构代码,以确保angular2变化检测能够吸收变化。如果这样可以帮助您发布有关模板的更多详细信息,或者放一个塞子,我们可以看到有什么更好的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Angular2 绑定不适用于 Observable

来自分类Dev

模型绑定不适用于angular2中的select

来自分类Dev

jQuery Xeditable不适用于Angular2

来自分类Dev

Angular2 useAsDefault不适用于子路由

来自分类Dev

ngStyle不适用于angular2中的!important

来自分类Dev

angular2 canActivate()不适用于Observable响应

来自分类Dev

Angular2管道不适用于输入

来自分类Dev

Oauth2 Google云端硬盘离线访问不适用于非Google应用文件吗?

来自分类Dev

了解Oauth2

来自分类Dev

适用于oauth2的Tomcat领域?

来自分类Dev

适用于Node.js的Oauth2

来自分类Dev

适用于oauth2的Tomcat领域?

来自分类Dev

CORS Cookie可用于获取请求,但不适用于Angular2中的发布

来自分类Dev

Google OAuth2 API

来自分类Dev

Ng2-table不适用于最新的Angular2版本

来自分类Dev

<div [innerHTML] = ....在angular2 html注入中不适用于iframe html>

来自分类Dev

Rxjs筛选器运算符不适用于Angular2 Observable

来自分类Dev

Node.js核心模块fs不适用于webpack和angular2 cli

来自分类Dev

为什么带有输入类型文本的日期管道不适用于angular2?

来自分类Dev

titlecase 管道不适用于三元运算符 angular2

来自分类Dev

Rails和OAuth2

来自分类Dev

了解OAuth2流程

来自分类Dev

Spring oauth2 InsufficientAuthenticationException

来自分类Dev

CAS与SAML与OAuth2

来自分类Dev

ServiceStack和OAuth2

来自分类Dev

Wirecloud中的Oauth2

来自分类Dev

是JWT OAuth2的实现

来自分类Dev

OAuth2访问令牌

来自分类Dev

Rails和OAuth2