我想使用ActivatedRoute在服务中获取路由参数,就像在Component中一样。
但是,当我在服务中注入(inject)ActivatedRoute对象时,它包含一个空的params变量

我创建了一个重现此行为的插件:
http://plnkr.co/edit/sckmDYnpIlZUbqqB3gli

请注意,其目的是在服务中而不是在组件中使用参数,punker的设置方式纯粹是为了演示问题。

组件(检索到test):

export class Component implements OnInit {
  result: string;

  constructor(private route: ActivatedRoute) {
  }

  ngOnInit() {
    this.route.params.subscribe(params => {
      this.result = params['test'];
    });
  }
}

服务(未检索test):

export class Service {
  result: string;

  constructor(private route: ActivatedRoute) {
    this.getData();
  }

  getData() {
    this.route.params.subscribe(params => {
      this.result = params['test'];
    });
  }
}

最佳答案

Service是属于根注入(inject)器的单例,并被注入(inject)root ActivatedRoute instance

导出有自己的喷射器和own ActivatedRoute instance

The solution here是让路由组件具有自己的Service实例:

@Component({
  ...
  providers: [Service]
})
export class MainComponent { ... }

09-28 13:55