使用SailsJS sails.io和Angular 2

时间:2016-07-16 19:24:15

标签: javascript angular websocket socket.io sails.js

有没有办法在Angular2中的服务提供者区域内实例化sails.io,以便websocket事件触发变更检测?

一个子问题:如何RXJS订阅sails.io数据流。 我使用的是Angular2 RC4和最新版本的SailsJS。

相关问题:Angular2 View Not Changing After Data Is Updated

1 个答案:

答案 0 :(得分:2)

<强>更新

让我恼火的是,我无法给出一个完整的例子,说明如何使用带有角度的角度2的Sails,所以我创建了一个github repo,它提供了如何工作的全貌。

我可以看到您关联的相关问题将如何引导您进入区域路径。但是,您可以将所有这些插入到一起,而无需手动修改区域。 Here是一个如何在plunker中使用Angular2实现sails.io的示例。这利用了RxJS来创建observable类型。您还必须实现不同版本的Angular2 change detection(所有这些都在plunker中实现)。

我在回答你的linked question时会详细介绍一下。

至于你的子问题,我不确定是否有办法整合流,我相信RxJS的一个意图是减少回调的使用,sails.io似乎仍然如此。

在plunker的服务中实现sails.io的摘录。

constructor() {
  this._ioMessage$ = <Subject<{}>>new Subject();
  //self is the window object in the browser, the 'io' object is actually on global scope
  self.io.sails.connect('https://localhost:1337');//This fails as no sails server is listening and plunker requires https
  this.listenForIOSubmission();
}

get ioMessage$(){
  return this._ioMessage$.asObservable();
}

private listenForIOSubmission():void{
  if(self.io.socket){//since the connect method failed in the constructor the socket object doesn't exist
    //if there is a need to call emit or any other steps to prep Sails on node.js, do it here.
    self.io.socket.on('success', (data) => {//guessing 'success' would be the eventIdentity
      //note - you data object coming back from node.js, won't look like what I am using in this example, you should adjust your code to reflect that.
      this._ioMessage$.next(data);//now IO is setup to submit data to the subscribbables of the observer
    });
  }
}