Aurelia/TS 激活不更新当前视图
Aurelia/TS Activate does not update current view
我想达到什么目的
我想根据 Id 更新我当前的视图。假设我有以下选项卡的侧边导航:
- 客户 A
- 客户 B
- 客户 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;
}
}
我想达到什么目的
我想根据 Id 更新我当前的视图。假设我有以下选项卡的侧边导航:
- 客户 A
- 客户 B
- 客户 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;
}
}