如何在aurelia中设置默认的activationStrategy

时间:2016-10-12 13:31:19

标签: aurelia aurelia-router

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

可以在VM中将invoke-lifecycle设置为activationStrategy,以便在查询字符串更改时重新运行VM中的所有生命周期。

为防止乱丢我的代码(将其放在每个VM中),我想将默认invoke-lifecycle设置为$warehouses = WarehousePivotCategory::with(['warehouse' => function($q) use ($title) { $q->where('title', 'like', '%' . $title . '%')->get(); },'WarehouseCategory'])->get();

在界面中,它解释了 可能,但如何设置呢? https://github.com/aurelia/router/blob/master/src/interfaces.js

3 个答案:

答案 0 :(得分:26)

在ViewModel

(我最初也误解了你的问题,但我为了完整而把它留下来了)

在ViewModel上放置方法determineActivationStrategy(),然后您可以返回要使用的激活策略的名称或类型。例如:

determineActivationStrategy() {
    return "invoke-lifecycle";
}

字符串"invoke-lifecycle""replace"将有效。您还可以通过导入枚举activationStrategy并退回activationStrategy.replace / activationStrategy.invokeLifecycle来使用键入的版本。他们的工作方式相同。

在RouteConfig

或者,正如Marton所说(在我做之前给出了这个答案),你可以直接把它作为属性activationStrategy放在路由配置中。

如果策略不依赖于ViewModel的任何特定状态,并且您不希望使用这些内容丢弃视图模型,则此方法更适合。

invoke-lifecycle vs. replace

在你的问题中,你说你想要

  

重新运行VM中的所有生命周期

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

  1. canDeactivate()
  2. deactivate()
  3. canActivate(params, routeConfig, navigationInstruction)
  4. activate(params, routeConfig, navigationInstruction)
  5. replace将丢弃现有的ViewModel并再次调用整个ViewModel生命周期 路由器激活生命周期:

    1. canDeactivate()
    2. deactivate()
    3. detached()
    4. unbind()
    5. (新实例):constructor()
    6. canActivate(params, routeConfig, navigationInstruction)
    7. activate(params, routeConfig, navigationInstruction)
    8. created(owningView, thisView)
    9. bind(bindingContext, overrideContext)
    10. attached()
    11. 因此,如果您确实想要运行所有ViewModel生命周期步骤,则需要使用replace

答案 1 :(得分:8)

activationStrategyRouterConfig的属性,表示config.map()使用的路由配置对象。我认为你需要在每个路由定义上设置它。

示例:

configureRouter(config, router) {
  ...
  config.map([
    { 
      route: ['', 'home'],       
      name: 'home',       
      moduleId: 'home/index', 
      activationStrategy: 'invoke-lifecycle'
    }
  ]);
  ...
}

(编辑原因:我最初误读了你的问题犯了一个可怕的错误,对不起:))

答案 2 :(得分:0)

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

Changelog entry