Angular4导入服务仅包含事件处理程序方法编译错误

时间:2018-01-23 00:14:54

标签: angular typescript

我有一个角度服务,它应该监视路由更改事件。当我尝试在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引用?

1 个答案:

答案 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)才能使用它。也许如果你提供更多信息。