【问题标题】:How to remove a query parameter from URL without refresh the router in Ember js如何在不刷新 Ember js 中的路由器的情况下从 URL 中删除查询参数
【发布时间】:2017-04-09 02:35:31
【问题描述】:

我有一个使用 Ember.js 构建的网站。用户可以通过 URL http://..../view?showTitle=true 访问页面。但是我不想将参数 showTitle=true 显式公开给用户(意味着用户只会看到 http://..../view)。此 URL 会自动生成并用作重定向目标 URL。所以,我必须在页面加载之前手动删除它。但是我仍然需要这个查询参数的这个值来查询数据。有没有办法实现这一点(一个例子会很棒)?不刷新路由器怎么办?

【问题讨论】:

    标签: url ember.js web-deployment router query-parameters


    【解决方案1】:

    实际上,您的场景示例会更好:)

    在过渡到路线时还有其他一些存储数据的方法。如:将参数存储在transition 对象中或将值存储在服务中。创建一个重定向路由,使用beforeModel钩子从查询参数中获取值,然后重定向到真正的路由。

    一个工作示例是:ember-twiddle-1

    顺便说一句,即使您没有在路线中描述您的queryParams,您也可以通过transition.queryParams 访问它们。这似乎有点hacky。但它可以工作:ember-twiddle-2(注意:它在同一条路线上不起作用。)

    更新:

    setupController 挂钩处,您可以覆盖控制器参数。因此,您可以从 url 中删除参数。 ember-twiddle-3

    【讨论】:

    • 感谢您的示例。 this.transitionTo({queryParams: {showTitle: undefined}}); 用于转换到同一模型。有没有办法在不进行任何过渡调用的情况下实现这一目标?
    • 是的。通过覆盖 setupController 钩子。我刚刚更新了我的答案并添加了第三个旋转。
    • 是的,这太棒了!它似乎在 twiddle 上运行良好。但是当我在本地运行它时,它只有在我单击页面中的链接时才起作用。手动打开 localhost:4200/my-route?showTitle=false 不会更新链接以删除参数。在我的例子中,这个 URL 是由后端组成的。所以我们可以把它作为用户输入。
    • @Hengstar 然后不使用上述任何替代方案,仅在my-route 路由的model 钩子中使用window.history.replaceState({},'my-route','my-route');。 (但请注意:旧版浏览器的行为可能会有所不同。Link)我无法在游戏中测试它,你能告诉我结果吗?
    • 它在本地工作!我还通过添加replace: true 属性找到了使用replaceState 的示例。 tutorialspoint.com/emberjs/route_url_rplc.htm 但我没有按预期工作。无论如何,我认为window.history.replaceState 对我来说已经足够了。非常感谢!
    猜你喜欢
    • 2013-07-04
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多