在Angular 1中,我会在解析中加载http数据(用户配置文件等)。在我看来,这就是决心所在。现在我没有明确的地方去做,但有很多选择。
@CanActivate()
似乎可以正常工作......但它会返回一个boolean
,并且该名称很明显这是http请求的错误位置。
ngOnInit
很不错 - 但它是在组件构造函数之后运行的。这意味着我无法对构造函数中的用户数据执行任何操作,例如将其绑定到成员变量或任何内容。当然,我也可以在ngOnInit
中做到这一点,但是看起来它不应该出现在构造函数中吗?
constructor()
是一个明显的候选人。但http reqs可能很长,而且它们本身似乎与构造组件无关。
我认为应该更像:
gatherData() -> constructor() -> ngOnInit()
我怎样才能做到这一点?
答案 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()
等...