【问题标题】:Passing query parameters using Router.go in iron router在 Iron 路由器中使用 Router.go 传递查询参数
【发布时间】:2014-10-22 08:33:47
【问题描述】:

我正在尝试在 Router.go 中传递查询参数,如下所示:

var filter = 'abc';
var path = Router.current() && Router.current().path;
Router.go(path, {query: {filter: filter}});

但这并没有改变 url,它仍然只加载当前路径而没有查询字符串。但是,如果我手动将查询参数添加到路径中,例如:

Router.go(path+'?filter='+filter);

这很好用。但是因为我试图用一些过滤的数据加载同一页面。因此,单击过滤器按钮会一次又一次地将过滤器字符串附加到路径。

使用 Iron 路由器传递查询字符串的正确方法是什么?

【问题讨论】:

  • 我的答案可以接受吗?

标签: meteor iron-router


【解决方案1】:

就在文档中

Router.go('post.show', {_id: 1}, {query: 'q=s', hash: 'hashFrag'});

上面的 JavaScript 将导航到这个 url:

/post/1?q=s#hashFrag

https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#named-routes

【讨论】:

    【解决方案2】:

    参数为Router.go(path, params, options)。查询部分应放在options 参数中,因此请尝试以下操作:Router.go(path, {}, {query: {filter: 'filter='+filter}})

    编辑

    根据下面的 Robins 评论更新答案。

    【讨论】:

    • 我试过了,但是页面没有重新加载查询参数
    • 这个答案几乎是正确的。查询需要是像Router.go(path, {}, {query: "filter=filter"}) 这样的字符串。来自 Iron Router 源代码行 220 github.com/iron-meteor/iron-router/blob/devel/lib/…
    • 呵呵,5 次投票的答案,这是错误的;P 但是很好,这应该可以解释为什么它对 Aashu 不起作用。
    【解决方案3】:

    我发现如果你在Router.go中的第一个参数是路径,而不是模板名,查询过滤器是不会通过的。使用模板名称:

    Router.go(templatename, {_id: 1}, {query: 'q=s', hash: 'hashFrag'}); 
    

    【讨论】:

    • 帮了我很多忙!
    【解决方案4】:

    试试这个:

    var path = Router.current() && Router.current().route.originalPath;
    

    这应该会给你没有附加查询字符串的路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多