问题描述
当导出作为aurelia中的视图模型的es6类时,我似乎能够在构造函数和激活函数中设置初始化代码。
这里有标准的约定吗?
我应该在一个而不是另一个中进行某些初始化吗?
用户没有实现es6类的激活功能吗?
1楼
dfsq
18
已采纳
2015-07-30 20:45:02
您可以在构造函数和激活方法中设置实例属性,它们都将由Aurelia调用。 但是,这里存在一些概念上的差异。
Activate是屏幕激活生命周期方法之一,理想情况下应该仅用于控制屏幕/视图模型行为。
例如, canDeactivate方法控制是否可以导航视图模型等canDeactivate也是一个钩子,它在渲染视图模型之前执行(但在attached钩子之前)。
但是,有可能永远不会调用activate方法,例如route在构造函数中导航或canActivate方法拒绝/返回false - 在这种情况下,仍然会调用构造,但激活不会。
另一方面,在任何其他钩子和方法之前调用construct方法,因此在activate之前调用它。
因此,构造是设置配置属性的主要位置,因为它需要依赖注入。
因此,当activate接受固定的参数集(params,routeConfig,navigationInstruction)时,传递给constructor方法的参数列表取决于您注入视图模型类的服务。
2楼
Lukas K
7
2016-11-24 22:57:07
我在这里看到的一个很大的区别是activate方法有一个Promis作为返回值,所以你可以在这里运行异步代码。 在构造函数中触发异步代码是一个非常糟糕的主意。 进一步的细节是构造函数不能抛出异常所以通常在这里你只需要将构造函数参数分配给局部变量而不需要任何逻辑。 我不会在构造函数中做更多的事情,并且实际的viewmodel初始化与逻辑应该在activate或attach方法中发生。