1
Plunkr:https://plnkr.co/edit/arROwxsFYraSBeAZCIYF?p=preview角2訂閱不執行
我想訂閱的觀察者,但我不能得到它的工作。訂閱方法從未被激活,出於某種原因,notifyAboutChange
運行並且傳遞了正確的標識,但在調用next
之後,訂閱方法似乎無法在被調用時啓用。
其中包含了觀察者的服務:
import {Injectable} from '@angular/core';
import {Subject} from 'rxjs/Subject';
@Injectable()
export class ApiService {
public notifier = new Subject();
public changeOccurrence$ = this.notifier.asObservable();
constructor() {}
notifyAboutChange(id: string) {
this.notifier.next(id);
}
}
指令,它調用notifyAboutChange
方法:
constructor(private _elementRef: ElementRef, private _renderer: Renderer, private _api: ApiService) {
this.eventHandler = _renderer.listen(_elementRef.nativeElement, ('ontouchstart' in window ? 'touchend' : 'click'), (e) => {
this.isAllChecked = !this.isAllChecked;
for (let checkbox of this.checkboxes) {
if (!checkbox.isDisabled) {
checkbox.isChecked = this.isAllChecked;
}
}
_api.notifyAboutChange(this.componentId);
});
}
組件應訂閱:
export class FormCheckboxMultipleComponent implements OnInit, DoCheck {
@Input() model: Array<any>;
@Input() checkboxes: Array<any>;
@Output('modelChange') onModelChange: EventEmitter<any> = new EventEmitter();
@Output() callback: EventEmitter<any> = new EventEmitter();
constructor(private _globals: GlobalVariablesService, private _differs: IterableDiffers, private _api: ApiService) {
this.ns = _globals.ns;
this.differ = _differs.find([]).create(null);
_api.changeOccurrence$.subscribe(
componentId => {
console.log(componentId);
if (this.componentId === componentId) {
for (let checkbox of this.checkboxes) {
let existingIndex = this.findIndex(checkbox, this.model);
if (existingIndex === -1) {
this.model.push(checkbox);
}
else {
this.model.splice(existingIndex, 1);
}
}
}
}
)
}
.... excluded parts ....
}
嗯沒有這不是它:/ – Chrillewoodz
您還需要從'組件/指令providers'屬性刪除服務... –
看到這個plunkr:https://plnkr.co/edit/lGgNq5HpqFZCQfGl0Tpw?p=preview –