如何在Angular2中管理服务

Angular 2 :2.0.0-alpha.31 / Typescript 1.5

目前我管理我的服务作为一个简单的Class ,然后我注入这个Class到其他组件。 例:

export class PlayerService {
  http: Http;
  players = [];

  constructor( @Inject(Http) http) {
        this.http = http;
  }

  getAll(callback) {
        this.http.get('/data/players.json')
              .toRx()
              .map((res) => res.json())
              .subscribe((data) => {
                    this.players= data;
                    callback(data);
              });
  }

  add(player) {
        //call webservice to save user  
        this.players.push(player); //only if save has work  
  }
  delete(player) {
        //Not implemented yet   
  }
  get(id) {
        //Not implemented yet   
  }
}

我想,我做错了。

  • 我使用http.get().toRx().subscribe() ? 我以为我看到有些人直接从toRx()返回Observable
  • 如果两个组件同时询问玩家( getAll() ),将执行两个查询。 我需要管理国旗还是有另一种方式?
  • 我在这里工作回调。 如果我希望数据“立即”(无异步),我该怎么办?
  • components会自动通知玩家添加/删除? 我是否必须使用某种事件来处理这个(任何示例?)?
  • 所以我的问题是:

  • 有没有一种常见的方式来管理Angular2中的服务?

  • 首先,服务做得很好,就像你做的那样,这是Angular2的一种方式:将一个Class注入到其他组件中。

    这就是说,关于你提出的其他问题,我宁愿返回并将结果存储在承诺中,而不是使用回调:

    getAll() {
        return players || players = new Promise(
            (resolve) => this.http.get('people.json').observer({next: resolve})
        );
    }
    

    注意 :您应该可以使用Observable.toPromise(),但由于某些原因,它在Angular2中不适合我

    这样进一步调用getAll()将不会触发更多的响应。

    对于同步问题,你不应该那样做。 现在你已经拥有了它的承诺,只要调用getAll()并在有玩家请求时返回一个承诺。

    get(id) {
        return getAll().then((result) => {return Promise.resolve(result[id])});  
    }
    

    关于处理玩家添加和移除的方式,这正是RxJS中Observable的意图。 当玩家列表发生变化时,您需要提供和Observable流,以通知观察者。 您可以使用EventEmitter:

    constructor( @Inject(Http) http) {
        this.http = http;
        this.myEventEmitter = new EventEmitter();
    }
    
    getUpdateStream() {
        myEventEmitter.toRx();
    }
    

    当你改变球员列表时,只需执行myEventEmitter.next(players)

    链接地址: http://www.djcxy.com/p/86865.html

    上一篇: How to manage Services in Angular2

    下一篇: Why is the OpenMP reduction clause needed to make reductions concurrent?