Angular 2 + SignalR - 从外部脚本

时间:2015-11-20 00:59:55

标签: javascript angular signalr

我将SignalR与Angular2应用程序一起使用,我们希望SignalR客户端方法使用从服务器接收的数据调用Angular应用程序,然后让Angular重做数据绑定。例如,在Angular应用程序中,我为我们的商店公开了一个全局变量,该变量上有一个集合。

E.g。     (打字稿)

....
export class Store{
  Customers : Customer[];
  constructor(){
    window["GlobalStore"] = this;
  }

  setCustomers (customers : Customer[]){
    this.Customers = customers;
  }
}
....

在我的客户端SignalR javascript中我有一个功能:

$.connection.MyHub.client.receive = function(data){
  //Call into the Angular app and set data, which is then rendered in views
  //via data-binding
  //data contains a json array of customers
  window.GlobalStore.setCustomers(data);
}

这似乎可以工作并在商店中设置数据,但是,重置数据时Angular似乎没有检测到更改,因此UI不会刷新。

这不是数据输入的问题,因为即使将简单的字符串/整数等传递到商店也会在调试时正确设置存储属性,但是,Angular框架似乎并不是然后触发更改检测并刷新视图。

关于如何: A)手动触发角度数据绑定,以便刷新视图? B)使用不同的方法从外部调用Angular 2 app中的方法?

由于

1 个答案:

答案 0 :(得分:1)

手动运行更改检测:

  1. 使用ApplicationRef::tick()方法。
  2. 使用NgZone::run()方法包装应在角区域内执行的代码。
  3. 您可以使用依赖注入或使用platform().application(bindings).bootstrap(Component)引导您的应用程序来获取它们:

    import { platform } from 'angular2/angular2';
    
    const app = platform().application([] /* - bindings */); // you can use `app.tick()` 
    const zone = app.zone; // you can use `zone.run`
    
    app.bootstrap(Component);