У меня есть программа angular2, в которой я хочу обновлять данные компонента, когда клик сделан на другом компоненте. я сделал службу, в которой у меня есть два метода: один для обновления данных и другой для получения данных.
моя служба выглядит следующим образом
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
import { Observable } from 'rxjs/Observable';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
@Injectable()
export class DataserviceService {
public subject = new Subject<any>();
sendMessage(message: any) {
debugger;
this.subject.next({ text: message });
}
clearMessage() {
this.subject.next();
}
getMessage(): Observable<any> {
return this.subject;
}
}
в моем компоненте a
где щелчок производится. У меня есть эта функция для обновления данных.
onClick()
{
this._dataserviceService.sendMessage(this.getJsonData());
}
и в компоненте b
я подписал его таким образом.
ngOnInit() {
debugger;
this.subscription = this._dataserviceService.getMessage().subscribe(message => { this.message = message;
console.log(this.message)
debugger;
});
}
если я выполняю подписку в том же компоненте, он отлично работает, но в другом компоненте он не обновляет данные. Любая помощь будет оценена по достоинству.
править На моем понимании главный вопрос в том, что мой абонентский компонент загружается после службы инициализации.
Попробуйте заменить функцию getMessage() следующим образом:
getMessage(): Observable<any> {
return this.subject.asObservable();
}
Кажется, что на данный момент ваш getMessage() не возвращает наблюдаемый объект, что объясняет, почему метод подписки неэффективен.