【问题标题】:How can I react to URL hash change with Iron Router?如何使用 Iron Router 对 URL 哈希更改做出反应?
【发布时间】:2015-12-30 22:59:58
【问题描述】:

我如何对 Iron Router 的 URL 哈希值变化做出反应?

我在自定义 route controller 中重新实现了 action 方法,以控制页面呈现,但是如果仅 URL 的哈希更改(例如,由于用户单击),则不会调用此挂钩href="#about" 的链接)。我的控制器的相关部分如下所示:

@UserController = RouteController.extend({
  action: ->
    tabName = @params.hash
    @state.set("activeTab", tabName)
    @render("user")
})

所以,基本上我需要 action 方法在 URL 哈希更改时被调用。

【问题讨论】:

    标签: javascript url meteor url-routing iron-router


    【解决方案1】:

    当哈希值改变时可以重新运行路由处理程序,只是默认情况下不会发生。为了实现这一点,请在控制器上调用getParams(),而不是仅仅访问params

    @UserController = RouteController.extend({
      action: ->
        tabName = @getParams().hash
        @state.set("activeTab", tabName)
        @render("user")
    })
    

    getParams 是一种依赖于哈希的响应式计算,因此由于控制器的action 方法本身是响应式的,它会在哈希更改时重新运行。

    【讨论】:

    【解决方案2】:

    afaik iron-router 不会对哈希更改做出反应。两个建议:

    1. 使用window.addEventListener() 捕捉哈希变化
    2. 在选项卡本身上实现事件

    选项 (1) 的优点是,如果有人分享链接,它就会起作用。

    window.addEventListener("hashchange",function({
      console.log(document.location);
    });
    

    【讨论】:

    • 1) 将是我的选择。你能提供它的工作代码吗?
    • 您如何将它与 Iron Router 集成?即,由于新的哈希值,我如何使 Iron Router 重新渲染。
    • 我发现实际上支持对哈希更改做出反应,请参阅我的回答。
    猜你喜欢
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2020-06-15
    • 2017-04-20
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    相关资源
    最近更新 更多