angular - ActivatedRoute 在服务中不起作用

标签 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});
  }

最佳答案

我的解决方案

因为服务在注入(inject)组件时似乎与 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);
  }

有更好的东西吗?

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

关于angular - ActivatedRoute 在服务中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47718356/

相关文章:

angular - 获取对 Angular 2.X 自定义模块中注入(inject)器的引用?

angular - 如何更新 Progressive Web App 的主屏幕图标?

javascript - Angular - 将更多项目加载到列表中

reactjs - 使用 redux-orm 和 TypeScript 的模态类定义

java - 有没有办法重新注入(inject)/更新注入(inject)的 bean 字段?

angular - Ionic2 如何在提供程序中获取 NavController

angular - Angular 6 中的 NullInjectorError : No provider for String!

angular - 发生未处理的异常 : Dev-server address info is not defined

javascript - Typescript 不允许我在 BrowserRouter 中使用历史记录

javascript - 使用不同参数的重写方法来扩展 Typescript 类不可能吗?