Angular 2 + SignalR - доступ к внутренним Angular внешним script
Я использую SignalR с приложением Angular2, где мы хотим, чтобы методы клиента SignalR вызывали в приложение Angular с данными, полученными с сервера, а затем Angular переделывали привязки данных. Например, в приложении Angular я выставляю глобальную переменную для нашего магазина, на которой есть коллекция.
например. (TypeScript)
....
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);
}
Кажется, что это работает и устанавливает данные в хранилище, однако, когда данные reset Angular, похоже, не обнаруживают изменений, и, следовательно, пользовательский интерфейс не обновляется.
Это не проблема с типизацией данных, так как даже прохождение простой строки/целого и т.д. в хранилище правильно задает свойство store при отладке, однако структура Angular, похоже, не запускает обнаружение изменений и обновить представления.
Любые идеи о том, как либо:
A) Вручную запускать привязку Angular, чтобы она обновляла представление?
B) Вызовите методы в приложении Angular 2 из внешнего с помощью другого средства?
Спасибо
Ответы
Ответ 1
Чтобы вручную запустить обнаружение изменений:
Вы можете получить их, используя инъекцию зависимостей или загрузив приложение с помощью 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);