Aurelia/TS 激活不更新当前视图

Aurelia/TS Activate does not update current view

我想达到什么目的

我想根据 Id 更新我当前的视图。假设我有以下选项卡的侧边导航:

  1. 客户 A
  2. 客户 B
  3. 客户 C

我想要的是用户可以点击客户 A 并且当前客户视图根据客户 ID 更新。

我实现这个有什么问题

我认为解决这个问题的最好方法是导航到页面并直接提供 Id,如下所示:

router.navigateToRoute("customer", { currentCustomerId });

然后在客户页面上,我在激活方法中收到如下 ID:

  public activate(params) {
    this.currrentCustomerId = params.currentCustomerId;
  }

实际上,这在您第一次导航到客户时起作用。但是当我点击另一个客户页面时,视图没有得到更新,因为激活方法没有被第二次触发。只有当我导航到另一个页面(不是客户页面)并返回或只是刷新整个页面时它才有效。

那么我可以用什么来实现我想要的呢?我想我必须使用 activate() 以外的东西?

如果有人能给我一些关于这个问题的见解,我将不胜感激。

此致。

这是由于default activation strategy,其中,如果URL仅在参数值方面发生变化,则组件将被重用并且不会调用挂钩。

要获得所需的行为,您可以在组件级别或路由级别自定义此行为。

在组件级别:

import {activationStrategy} from 'aurelia-router';

export class CustomerComponent {
  determineActivationStrategy() {
    return activationStrategy.replace;
  }

  activate(params: {currrentCustomerId: string}) {
    this.currentCustomerId = params.currentCustomerId;
  }
}

路由级别:

import {Router, RouterConfiguration} from 'aurelia-router'; 

export class App {
   configureRouter(config: RouterConfiguration, router: Router) {
     config.map([{
       name: 'customer',
       moduleId: './customer',
       route: 'customer/:currentCustomerId',
       activationStrategy: 'replace'
     }]);

     this.router = router;
   }
}