Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我如何使用Iron Router对URL哈希更改作出反应?_Javascript_Url_Meteor_Url Routing_Iron Router - Fatal编程技术网

Javascript 我如何使用Iron Router对URL哈希更改作出反应?

Javascript 我如何使用Iron Router对URL哈希更改作出反应?,javascript,url,meteor,url-routing,iron-router,Javascript,Url,Meteor,Url Routing,Iron Router,使用Iron Router时,我如何应对URL的哈希变化 为了控制页面呈现,我在自定义中重新实现了操作方法,但是如果URL的散列发生更改,则不会调用此钩子(例如,由于用户单击带有href=“#about”)的链接)。控制器的相关部分如下所示: @UserController = RouteController.extend({ action: -> tabName = @params.hash @state.set("activeTab", tabName) @

使用Iron Router时,我如何应对URL的哈希变化

为了控制页面呈现,我在自定义中重新实现了
操作
方法,但是如果URL的散列发生更改,则不会调用此钩子(例如,由于用户单击带有
href=“#about”
)的链接)。控制器的相关部分如下所示:

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

因此,基本上我需要
操作
方法在URL哈希更改时被调用。

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

  • 使用
    window.addEventListener()
    捕获哈希更改
  • 在选项卡本身上实现事件
  • 选项(1)的优点是,如果有人共享链接,它将起作用

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

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

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

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

    1)将是我的选择。你能为它提供工作代码吗?你会如何将它与Iron Router集成?例如,由于新的散列值,我如何使Iron Router重新呈现。我发现实际上支持对散列更改做出反应,请参阅我的答案。@MichelFloyd它在中,但不太容易发现。