在Aurelia生命周期中,我应该填充组件属性吗?

时间:2016-12-02 15:55:38

标签: javascript aurelia lifecycle

我有一个Aurelia组件,它有一些属性(项目列表),我想从API调用初始化。该项目列表最终将显示在 select 元素中。虽然该列表为空,但我可以显示空选择(或禁用它)。

我的问题是,在component lifecycle中我应该填写项目列表吗?我已经看到answer这表明attached。但我在考虑,因为它并不真正依赖于附加或绑定的组件,我只会在构造函数中执行它。

有哪些优点,缺点和影响?

component.js

@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;
    });
  }
}

component.html

<template>
  <div>
    <select value.two-way="selectedItem">
      <option repeat.for="item of items" model.bind="item">${item.id}</option>
    </select>
  </div>
</template>

1 个答案:

答案 0 :(得分:3)

作为一般性建议,我不会在构造函数中执行此操作。无论框架或语言如何,这都适用于您正在编写的任何代码。构造函数应该完成设置对象然后返回所需的最少量工作。当然,你在这里使用了一个承诺,所以构造函数仍然会很快完成,所以有一个论点可以证明这没关系。

有人说......

您将使用的回调取决于用例。对于路由器未加载的组件,您有三种选择:createdbindattached。在您的用例中,您可以在加载数据之前禁用select元素,因此使用attached回调很好。我个人可能会把这个电话放在这里。

如果在数据绑定之前需要数据,我会使用created回调。如果要检索的数据需要通过数据绑定接收的参数,我将使用bind回调。