如何正确覆盖从使用 observable 的服务继承的服务中的方法?
How to properly override a method in a service that is inherited from a service that uses observable?
我想覆盖 MessagingService 的 add 方法。
为此,我 create 我自己的 MsgService 扩展了 MessagingService:
@Injectable({
providedIn: 'root'
})
export class MsgService extends MessageService {
constructor() {
super();
}
public add(msg: Message) {
console.log(msg);
super.add(msg);
}
}
我在控制台中看到正在调用该方法的确认消息,但消息本身并未出现。
Messagservice 使用 Observable,在调试器下我看到 observers 数组是空的:
有人可以解释为什么会发生这种情况以及如何正确覆盖继承服务中的方法吗?
这就是您的组件覆盖服务的方式 class :-
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
providers: [
{
provide: MessageService,
useClass: MsgService
}
]
})
export class AppComponent {
// constructor(private messageService: MessageService, private primengConfig: PrimeNGConfig) {}
constructor(
private messageService: MessageService,
private primengConfig: PrimeNGConfig
) {}
ngOnInit() {
this.primengConfig.ripple = true;
}
showViaService() {
this.messageService.add({
severity: 'success',
summary: 'Service Message',
detail: 'Via MessageService'
});
}
}
工作 Stackblitz :- https://stackblitz.com/edit/primeng-messages-demo-qukwyz?file=src/app/app.component.ts
我想覆盖 MessagingService 的 add 方法。
为此,我 create 我自己的 MsgService 扩展了 MessagingService:
@Injectable({
providedIn: 'root'
})
export class MsgService extends MessageService {
constructor() {
super();
}
public add(msg: Message) {
console.log(msg);
super.add(msg);
}
}
我在控制台中看到正在调用该方法的确认消息,但消息本身并未出现。
Messagservice 使用 Observable,在调试器下我看到 observers 数组是空的:
有人可以解释为什么会发生这种情况以及如何正确覆盖继承服务中的方法吗?
这就是您的组件覆盖服务的方式 class :-
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
providers: [
{
provide: MessageService,
useClass: MsgService
}
]
})
export class AppComponent {
// constructor(private messageService: MessageService, private primengConfig: PrimeNGConfig) {}
constructor(
private messageService: MessageService,
private primengConfig: PrimeNGConfig
) {}
ngOnInit() {
this.primengConfig.ripple = true;
}
showViaService() {
this.messageService.add({
severity: 'success',
summary: 'Service Message',
detail: 'Via MessageService'
});
}
}
工作 Stackblitz :- https://stackblitz.com/edit/primeng-messages-demo-qukwyz?file=src/app/app.component.ts