有没有办法在Angular2中的服务提供者区域内实例化sails.io
,以便websocket事件触发变更检测?
一个子问题:如何RXJS订阅sails.io数据流。 我使用的是Angular2 RC4和最新版本的SailsJS。
答案 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
});
}
}