如何在aurelia中设置默认激活策略

如何在aurelia中设置默认激活策略,aurelia,Aurelia,Aurelia通常会忽略查询字符串中的任何更改 可以将VM中的激活策略设置为调用生命周期,以便在查询字符串更改时重新运行VM中的所有生命周期 为了防止乱扔代码(将其放在每个VM中),我想将默认的activationStrategy设置为invoke lifecycle 在界面中,解释了是可能的,但如何设置? 激活策略是RouterConfig的一个属性,它表示config.map()使用的路由配置对象。我认为您需要在每个路线定义上设置它 例如: configureRouter(配置,路由器){

Aurelia通常会忽略查询字符串中的任何更改

可以将VM中的
激活策略设置为
调用生命周期
,以便在查询字符串更改时重新运行VM中的所有生命周期

为了防止乱扔代码(将其放在每个VM中),我想将默认的
activationStrategy
设置为
invoke lifecycle

在界面中,解释了是可能的,但如何设置?
激活策略是
RouterConfig
的一个属性,它表示
config.map()
使用的路由配置对象。我认为您需要在每个路线定义上设置它

例如:

configureRouter(配置,路由器){
...
config.map([
{ 
路线:[“家”],
姓名:'家',
moduleId:'主/索引',
activationStrategy:“调用生命周期”
}
]);
...
}

(编辑原因:我一开始误读了你的问题,犯了一个严重的错误,对不起:)

关于ViewModel (一开始我也误读了你的问题,但为了完整起见,我把这个留在这里)

在ViewModel上放置一个方法
determinateActivationStrategy()
,从中可以返回您希望使用的激活策略的名称或类型。例如:

determineActivationStrategy() {
    return "invoke-lifecycle";
}
字符串
“调用生命周期”
“替换”
将起作用。您还可以通过导入枚举
activationStrategy
并重新键入
activationStrategy.replace
/
activationStrategy.invokeLifecycle来使用键入的版本。它们的工作原理相同

在RouteConfig中 或者,正如Marton所说(他在我之前给出了这个答案),您可以将其作为属性
activationStrategy
直接放在路由配置中

如果策略不依赖于ViewModel的任何特定状态,并且您不希望视图模型中充斥着这些东西,那么这种方法更适合

调用生命周期与替换 在你的问题中,你说你想

重新运行虚拟机中的所有生命周期

请注意,
invoke lifecycle
重用现有的ViewModel,并且只调用路由器激活生命周期,如下所示:

  • canDeactivate()
  • deactivate()
  • canActivate(参数、路由图、导航说明)
  • 激活(参数、路由配置、导航说明)
  • replace
    将丢弃现有的ViewModel,并在路由器激活生命周期的顶部再次调用整个ViewModel生命周期

  • canDeactivate()
  • deactivate()
  • 分离()
  • unbind()
  • (新实例):
    constructor()
  • canActivate(参数、路由图、导航说明)
  • 激活(参数、路由配置、导航说明)
  • created(owningView,thisView)
  • bind(bindingContext,overrideContext)
  • attached()

  • 因此,如果确实要运行所有ViewModel生命周期步骤,则需要使用
    replace

    您可以使用
    config.options.comparequalyParams=true


    使用“determineActivationStrategy”也是我的第一个想法。然后我意识到Vijay希望避免将其放入每个VM中。你的答案有更多细节,所以+1!:)有趣的是,我一开始也误读了他的问题,以为他想把它放在ViewModel上!直到现在,你提到了它,我重新读了一遍,我才发现。所以在我回答之前,你的答案实际上是正确的。投票结果也一样:皮和奥雷利亚·德夫谈过,他说了同样的话。但是,将其放在路由配置中不起作用。我会提出一个问题,谢谢:)这似乎不工作w/Aurelia v1.0.0-rc.1.0.0。