Aurelia类构造函数vs激活

Dan*_*ham 17 javascript constructor aurelia

当导出作为aurelia中的视图模型的es6类时,我似乎能够在构造函数和激活函数中设置初始化代码.

这里有标准的约定吗?

我应该在一个而不是另一个中进行某些初始化吗?

用户没有实现es6类的激活功能吗?

dfs*_*fsq 18

您可以在构造函数和激活方法中设置实例属性,它们都将由Aurelia调用.但是,这里存在一些概念上的差异.

Activate是屏幕激活生命周期方法之一,理想情况下应该仅用于控制屏幕/视图模型行为.例如,canDeactivate方法控制是否可以导航视图模型等.Activate也是一个钩子,它在视图模型被渲染之前执行(但在attached钩子之前).但是,有可能activate永远不会调用方法,例如路由在构造函数中导航或canActivate方法拒绝/返回false - 在这种情况下,构造仍将被调用,但激活将不会.

另一方面,construct在任何其他钩子和方法之前调用方法,因此之前调用它activate.因此,构造是设置配置属性的主要位置,因为它需要依赖注入.因此,当activate接受固定的参数集(params,routeConfig,navigationInstruction)时,传递给constructor方法的参数列表取决于您注入视图模型类的服务.

  • Aurelia文档仍然很糟糕..但你可以在这里找到一些信息:https://github.com/aurelia/documentation/blob/master/English/docs.md#the-screen-activation-lifecycle (3认同)

Luk*_*s K 7

我在这里看到的一个很大的区别是activate方法有一个Promis作为返回值,所以你可以在这里运行异步代码.在构造函数中触发异步代码是一个非常糟糕的主意.进一步的细节是构造函数不能抛出异常所以通常在这里你只需要将构造函数参数分配给局部变量而不需要任何逻辑.我不会在构造函数中做更多的事情,并且实际的viewmodel初始化与逻辑应该在activateattach方法中发生.