Я создал MessageService
, в который я помещаю данные, которые затем считываются моим app.main
для отображения этих сообщений пользователю. Когда я использую эту службу в компоненте, она работает нормально. Что я хочу сделать, так это переместить это на уровень HttpInterceptor
, который будет отслеживать все HttpResponse
для сообщений сервера и передавать их в службу для отображения пользователем.
Вот мой сервис:
@Injectable()
export class MessageService {
private successMessageList = new Subject<string>();
successMessages$ = this.successMessageList.asObservable();
constructor() { }
addSuccessMsg(msg: string) {
this.setMsgs(this.successMessageList, msg);
}
private setMsgs(privMsgArray: Subject<string>, newMsgs: any) {
let messages = [];
messages.push(newMsgs);
messages.forEach(message => privMsgArray.next(message));
console.log(this.successMessageList);
}
}
Вот мой HttpInterceptor
@Injectable()
export class MyHttp implements HttpInterceptor {
constructor(private messageService: MessageService) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).do((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
if(event.body['successMsg']) {
this.messageService.addSuccessMsg(event.body['successMsg']);
}
}
})
}
}
Это мой app.main
, который читает данные
export class AppComponent implements OnInit {
successMessages = [];
constructor(private messageService: MessageService) { }
ngOnInit(): void {
this.messageService.successMessages$.subscribe(
message => {
console.log(message);
setTimeout(() => {
this.successMessages.push(message);
});
});
}
}
С некоторыми операторами консоли я вижу, что данные правильно попадают в частный метод messageService.setMsgs(...)
, но никогда не достигают моего app.main
, как это происходит, когда я отправляю сообщения через компоненты. Нет никаких сообщений об ошибках или чего-то еще, это просто не работает.
Я заметил одну вещь: в MessageService.setMsgs(..)
я поместил оператор консоли для successMessageList
. Когда я добавляю сообщение через компонент, я получаю вывод, который выглядит следующим образом (ПРИМЕЧАНИЕ observers: Array(1)
vs observers: Array(0)
)
Subject {_isScalar: false, observers: Array(1), closed: false, isStopped: false, hasError: false, …}
Но когда я добавляю сообщение через HttpInterceptor
, я получаю это
Subject {_isScalar: false, observers: Array(0), closed: false, isStopped: false, hasError: false, …}
Любые идеи о том, что происходит, будут очень признательны!
Я использую Angular 5
successMessages
, который является субъектом, который будет выдавать значения для компонента, где вы делаете это локально для службы - person Rahul Singh   schedule 21.11.2017