我有一个角度服务,它应该监视路由更改事件。当我尝试在AppModule级别添加此服务时,我收到一个编译错误,其中显示“已声明服务但其值永远不会被读取”。我理解错误的含义并了解其出现的原因,问题在于我不需要从服务外部调用任何服务功能。这是一个类似于我的服务的代码片段
@Injectable()
export class MyService {
constructor(
private router: Router,
private route: ActivatedRoute
) {
this.router.events
.filter(e => e instanceof NavigationEnd)
.forEach(e => this.onRouteChanged(this.route.root.firstChild.snapshot.data.analytics.pageName));
}
onRouteChanged(pageName: string) {
// do some stuff with the page name
}
}
这就是我在app.module.ts中的内容。如果我不包含仅使用我的服务执行控制台日志的ngOnInit函数,那么它将无法编译。
export class AppModule {
constructor(
private myService: MyService // if this line is not here then my service doesn't load at all and the route changed event is not tracked
) { }
ngOnInit() {
console.log(this.myService);
}
}
如果我执行console.log,我可以看到路由更改事件触发,因此我知道服务已加载。是否可以在不需要console.log的情况下包含MyService引用?
答案 0 :(得分:0)
你说它有效,但我不明白。您没有订阅路线事件。这样的事情对我来说更有意义:
this.router.events
.filter(e => e instanceof NavigationEnd)
.map(e => this.route.root.firstChild.snapshot.data.analytics.pageName)
.subscribe(this.onRouteChanged)
这个其他代码对于角度创建服务实例是必要的
constructor(
private myService: MyService
) { }
我刚刚在这里尝试了一项测试,但我并不需要这个console.log(this.myService)
才能使用它。也许如果你提供更多信息。