Возможно, мне не хватает какой-то концепции Angular2 об обнаружении изменений.
Я читал о NgZones и ChangeDetectionStrategy, но ни одна из них не решила мою проблему.
Дело в том, что у меня есть внешний модуль, в котором я храню свои Observables и использую их в некоторых компонентах, когда один из компонентов что-то изменяет в службе, он распространяется на другие компоненты.
Я написал плункер, чтобы помочь выразить свою проблему
http://plnkr.co/edit/ieHnm0ikBe4BR5w6O1XE?p=preview
Там у меня есть src/MyService.ts
, где я имитирую Subject
с постоянным изменением данных, используя setInterval
.
Subject
потребляется в src/app.ts
, и его значение отображается только при нажатии кнопки с пустым обработчиком кликов.
src/MyService.ts
import * as Rx from 'rxjs/Rx';
let global = {};
// The Observable
global.subject = new Rx.Subject();
// Updates value every second
setInterval(() => global.subject.next(Date.now()), 1000);
export var Global = global;
src/app.ts
import {Component} from 'angular2/core'
import {Global} from './myService'
@Component({
selector: 'my-app',
providers: [],
template: `
<div>
<h2>Hello {{name}}</h2>
<button (click)="clickMe()">Click me</button>
<p>Current time: {{subject | async}}</p>
</div>
`,
directives: []
})
export class App {
public subject = Global.subject;
constructor() {
this.name = 'Angular2'
}
public clickMe () {
console.log("I'm just a click event that do nothing");
}
}