【问题标题】:Use query params of parent route to refresh the model in subroute使用父路由的查询参数刷新子路由中的模型
【发布时间】:2016-07-12 04:24:34
【问题描述】:

我有一个路由main,它有一个查询参数search。 我有子路由main.sub1main.sub2

转到/main/sub1?search=hello/main/sub2?search=hellomain 路由的查询参数设置为hello。这部分工作正常。

现在我希望能够在路由main中的查询参数search发生变化时刷新main.sub1的模型,所以我这里是路由main.sub1的代码:

export default Ember.Route.extend({
  queryParams: {
    search: {
      refreshModel: true
    }
  },

  model(params) {
    // here I can use params.search to fetch the model for this route
  }
}

我认为由于main.sub1 的控制器中没有search 查询参数,Ember 会足够聪明地猜测它必须使用来自main 的参数。但是现在,当我转到/main/sub1 时,我收到了以下错误消息:

断言失败:不允许有多个控制器属性映射到同一个查询参数键,但 main:searchmain.sub1:search 都映射到 search。您可以通过 as 配置选项将控制器属性之一映射到不同的查询参数键来解决此问题,例如search: { as: 'other-search' }

我的猜测是 Ember 会自动在 main.sub1 中创建一个查询参数 search,它与来自 main 的参数冲突,甚至不会尝试使用来自 main 的参数。

我该如何克服这个问题?

简单地说:如何使用父路由的属性作为子路由的查询参数?

谢谢!

【问题讨论】:

  • 不能只在父路由中有查询参数吗?您仍然可以在子路由中访问它。
  • 您的“主要”模型是否随查询参数而变化?如果没有,您可以将参数移动到您的子路由

标签: ember.js ember-cli


【解决方案1】:

我遇到了同样的问题。

使用“主”路由的 queryParams 就完全够用了。 您不需要向子路由添加任何 queryParams。 refreshModel 设置属于主路由,所有子路由也会刷新。

您也可以用于子路由模型: this.paramsFor(‘main’)

见:https://discuss.emberjs.com/t/refresh-model-when-the-queryparam-of-a-parent-route-changes/14903/2

【讨论】:

    猜你喜欢
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2013-11-23
    相关资源
    最近更新 更多