ActivatedRoute在服务中不起作用

时间:2017-12-08 16:25:44

标签: angular typescript dependency-injection

服务中的ActivatedRoute

问题

我试图在服务中使用ActivatedRoute,并注意到它似乎没有跟踪我当前所在的路线。事实上它似乎没有采取任何路线。我花了很长时间才弄清楚发生了什么,我无法在网上找到许多有用的答案(可能是因为大多数人比我快得多:))。

只是想确保我发布了一些内容,以便其他人可以更快地找到解决方案。

这是我遇到问题时代码的样子。

@Injectable()
export class ImdbService {

  constructor(private router: Router,
    private route: ActivatedRoute) {
  }

  closeDetails(): void {
    this.detailsOpened = false;
    this.router.navigate(['../'], {relativeTo: this.route});
  }

1 个答案:

答案 0 :(得分:4)

我的解决方案

因为当作为组件注入时,服务似乎没有与ActivatedRoute相同的交互,我的解决方案是将ActivatedRoute作为我正在使用的服务调用中的参数传递。

以下是适合我的解决方案:

@Injectable()
export class ImdbService {

  constructor(private router: Router) {
  }

  closeDetails(currentRoute): void {
    this.detailsOpened = false;
    this.router.navigate(['../'], {relativeTo: currentRoute});
  }

在组件中:

export class MovieDetailsComponent implements OnInit, OnDestroy {

  constructor(..., private route: ActivatedRoute ) { }

  closeDetails() {
    this.imdbService.closeDetails(this.route);
  }

有更好的东西吗?

如果有人对这个问题有更好的解决方案或者只是一个不同的解决方案,或者有充分的理由以完全不同的方式做到这一点,我很乐意看到它。