我有一个Aurelia组件,它有一些属性(项目列表),我想从API调用初始化。该项目列表最终将显示在 select 元素中。虽然该列表为空,但我可以显示空选择(或禁用它)。
我的问题是,在component lifecycle中我应该填写项目列表吗?我已经看到answer这表明attached
。但我在考虑,因为它并不真正依赖于附加或绑定的组件,我只会在构造函数中执行它。
有哪些优点,缺点和影响?
@inject(WebApi)
export class MyComponent {
api = undefined;
items = undefined;
/**
* Creates the component
* @param api the web API
*/
constructor(api) {
this.api = api;
this.api.getItems().then(items => {
this.items = items;
});
}
}
<template>
<div>
<select value.two-way="selectedItem">
<option repeat.for="item of items" model.bind="item">${item.id}</option>
</select>
</div>
</template>
答案 0 :(得分:3)
作为一般性建议,我不会在构造函数中执行此操作。无论框架或语言如何,这都适用于您正在编写的任何代码。构造函数应该完成设置对象然后返回所需的最少量工作。当然,你在这里使用了一个承诺,所以构造函数仍然会很快完成,所以有一个论点可以证明这没关系。
有人说......
您将使用的回调取决于用例。对于路由器未加载的组件,您有三种选择:created
,bind
和attached
。在您的用例中,您可以在加载数据之前禁用select元素,因此使用attached
回调很好。我个人可能会把这个电话放在这里。
如果在数据绑定之前需要数据,我会使用created
回调。如果要检索的数据需要通过数据绑定接收的参数,我将使用bind
回调。