Aurelia class 构造函数与激活函数

Aurelia class Constructor vs Activate

导出 es6 class 时,它在 aurelia 中充当视图模型,我似乎能够在构造函数和激活函数中设置初始化代码。

这里有什么标准约定吗?

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

是否为未实现 es6 classes 的用户提供激活功能?

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

Activate 是屏幕激活生命周期方法之一,理想情况下应该仅用于控制 screen/view-model 行为。例如,canDeactivate 方法控制是否可以导航到 view-model 等。Activate 也是一个挂钩,它在 view-model 被渲染之前执行(但在 attached 挂钩之前)。但是,可能永远不会调用 activate 方法是说路由在构造函数中导航或 canActivate 方法 rejects/returns false - 在这种情况下构造仍将被调用,但激活将是不是。

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

我在这里看到的一个很大的区别是 activate 方法有一个 Promis 作为 return 值,所以你可以在这里 运行 异步代码。在构造函数中触发异步代码是一个非常糟糕的主意。进一步的细节是构造函数不得抛出异常,因此通常在这里您只需将构造函数参数分配给局部变量而无需 any 逻辑。我不会在构造函数中做更多的事情,实际的视图模型初始化逻辑应该发生在 activateattached 方法中。