Aurelia激活功能永远不会被调用

时间:2017-07-13 09:18:25

标签: javascript typescript aurelia

我使用Aurelia + WebStorm编写了一个工具栏。在这个工具栏中有一个激活功能,但它永远不会被自动调用。您可以在此处查看TypeScript代码:

import {autoinject} from "aurelia-dependency-injection";
import {RouteConfig, Router} from "aurelia-router";
import {bindable} from "aurelia-templating";
import {getLogger} from "aurelia-logging";
import {ActuatorApi, NotificationApi, SystemApi} from "gen/api";

@autoinject
export class HeaderBar {
  private static LOG = getLogger("header-bar");
  public notificationKey: string;
  ...

  @bindable
  public router: Router;
  constructor(private actuatorApi: ActuatorApi, private notificationApi: NotificationApi,
              private systemApi: SystemApi) {
      this.isBatterieTestActive = true;
      this.hrefForActuatoresList = "#/app/configuration/actuators/";
      this.loadActuators();
  }

  public async activate(params: any, routeConfig: RouteConfig): Promise<void> {

    return this.loadNotifications();
  }
你能帮帮我吗?

1 个答案:

答案 0 :(得分:4)

您可能希望尝试对组件使用激活方法,而不是附加。例如:

export class HeaderBar {

    private async attached(): Promise<void> {
        return await this.loadNotifications();
    }

    private loadNotifications() {
        // do your async stuff here...
        console.log('yeej, it works!');
    }

}

与原始代码段相比有些变化:

  • 考虑到你没有使用params和/或routeconfig,使用activate是完全合理的,似乎符合你的需求(据我现在所见)
  • 为了简洁起见,我已删除了您问题的所有其他不相关代码
  • “async”这个方法没有问题,正如您在我的示例中所看到的那样

在Aurelia文档的Component Lifecycle部分中也更详细地描述了activate()的用法。

更新:对于Aurelia生命周期的差异,StackOverflow问题"Difference between a Component and a View in Aurelia (and their lifecycle)"也可能会受到关注。