Angular 2在变量值变化后没有刷新视图?

时间:2016-08-04 17:36:36

标签: angular

所以,在过去的两个小时里,我一直在拔头发寻找答案。 我有一个像这样的简单AppComponent:

import {Component, OnInit} from '@angular/core';
import {UserDataService}  from '../services/user-data.service';

@Component({
selector: 'myapp',
template: `
<h1>Angular 2 app inside a desktop app</h1>
<div *ngIf="data">
    {{data}}
</div>
`,
})

export class AppComponent{
     public data : Object;

     constructor(private userDataService : UserDataService) {}

     ngOnInit(){
      this.data=this.userDataService.getUserData(); 
     }

}

我想要的是从UserDataService的配置文件中导入数据,如下所示:

  import {Injectable}    from '@angular/core';
  import {Http,Response} from '@angular/http';
  import {Observable} from 'rxjs/Rx';

  @Injectable()
  export class UserDataService{
   public data : Object;

   constructor(private http : Http){}

   getUserData(){
      this.http.get('./config.json').map((res:Response)=>res.json())
      .subscribe(data => {this.data = data});

   return this.data;
   }

}

我想检查一下该配置文件中是否存在某个变量,如果确实存在,我想显示div,但问题是视图没有像我想象的那样刷新。我显然没有理解这种情况所以任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

异步处理有点不同。

export class AppComponent {
     public data : Object;

     constructor(private userDataService : UserDataService) {}

     ngOnInit() {
       // subscribe and assign result when it arrives to `this.data`
       this.userDataService.getUserData().subscribe(data => this.data = data); 
     }

}

使用.map()代替subscribe(),以便重新Observable而不是Subscription,以便在数据到达时通知来电者。

如果您想在呼叫网站上使用结果,请添加实际的return

getUserData() {
    return this.http.get('./config.json')
    .map((res:Response)=>res.json())
//    .map(data => {this.data = data});
}