Толстые функции стрелок всегда связаны с объектом, в котором они определены, функция будет связана с объектом, из которого они вызваны. Измените свой обработчик на функцию стрелки.
handler = (incomingBlogs: Blog[]) => {
this.blogs = incomingBlogs;
console.log("we get: ", this.blogs);
console.log("this in handler", this); //seems the this keyword refers to something different than the object itself.
}
Если вы установите точку останова в текущей функции, вы увидите, что это указывает на наблюдаемую функцию, из которой она вызывается.
Если вы хотите использовать обычную функцию, вы можете передать ее как параметр
handler(incomingBlogs: Blog[], controller: ArticlesComponent) {
controller.blogs = incomingBlogs;
console.log("we get: ", controller.blogs);
console.log("this in handler", controller); //seems the this keyword refers to something different than the object itself.
}
Но мой совет - не подписываться на наблюдаемые в контроллере и использовать асинхронный канал в вашем представлении.
blogs$ = this.blogService.getBlogs();
В вашем TypeScript и в вашем представлении
<ng-container *ngIf="blogs$ | async as blogs">
Use blogs here as you would have before
{{blogs | json}}
</ng-container>
Тогда у вас есть представление, управляющее вашей подпиской, и вам не нужно беспокоиться о бесхозных подписках.