我在哪里加载Angular2中的路径数据

时间:2016-03-04 23:34:50

标签: http typescript angular

在Angular 1中,我会在解析中加载http数据(用户配置文件等)。在我看来,这就是决心所在。现在我没有明确的地方去做,但有很多选择。

@CanActivate()似乎可以正常工作......但它会返回一个boolean,并且该名称很明显这是http请求的错误位置。

ngOnInit很不错 - 但它是在组件构造函数之后运行的。这意味着我无法对构造函数中的用户数据执行任何操作,例如将其绑定到成员变量或任何内容。当然,我也可以在ngOnInit中做到这一点,但是看起来它不应该出现在构造函数中吗?

constructor()是一个明显的候选人。但http reqs可能很长,而且它们本身似乎与构造组件无关。

我认为应该更像:

gatherData() -> constructor() -> ngOnInit()

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

您应该使用constructor()来设置依赖注入,而不是其他。 ngOnInit()是开始"更好的地方。 - 组件'绑定已解析,因此您可以使用从父组件传递的数据。对于路由中使用的组件,您还有routerOnActivate()。这是路由组件生命周期钩子的简单示例:

@RouteConfig([
  { path: '/test', name: 'Test', component: Dummy },
])
class Main {}

@Component({ template: `` })
export class Dummy {
  constructor() { console.log("Dummy: constructor"); }
  ngOnInit() { console.log("Dummy: ngOnInit"); }
  ngAfterContentInit() { console.log("Dummy: ngAfterContentInit"); }
  ngAfterViewInit() { console.log("Dummy: ngAfterViewInit"); }
  ngOnDestroy() { console.log("Dummy: ngOnDestroy"); }
  routerOnActivate() { console.log("Dummy: routerOnActivate"); }
  routerOnDeactivate() { console.log("Dummy: routerOnDeactivate"); }
}

// output:
Dummy: constructor
Dummy: routerOnActivate
Dummy: ngOnInit
Dummy: ngAfterContentInit
Dummy: ngAfterViewInit
....
Dummy: routerOnDeactivate
Dummy: ngOnDestroy

根据您的需要,您可以在任何这些挂钩中调用服务和设置订阅。如果您需要路由器数据使用routerOnActivate(),如果您需要输入绑定,请使用ngOnInit()等...