我如何对 Iron Router 的 URL 哈希变化做出反应?
How can I react to URL hash change with Iron Router?
我如何才能对 Iron Router 的 URL 哈希变化做出反应?
我在自定义 route controller 中重新实现了 action
方法以控制页面呈现,但是如果只有 URL哈希更改(f.ex。由于用户单击 link 和 href="#about"
)。我的控制器的相关部分如下所示:
@UserController = RouteController.extend({
action: ->
tabName = @params.hash
@state.set("activeTab", tabName)
@render("user")
})
所以,基本上我需要 action
方法在 URL 哈希值发生变化时被调用。
afaik iron-router 不会对哈希更改做出反应。两条建议:
- 使用
window.addEventListener()
捕捉哈希变化
- 在选项卡本身上实施事件
选项 (1) 的优点是如果有人共享 link。
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
方法本身是反应式的,它将在哈希更改时重新获得 运行。
我如何才能对 Iron Router 的 URL 哈希变化做出反应?
我在自定义 route controller 中重新实现了 action
方法以控制页面呈现,但是如果只有 URL哈希更改(f.ex。由于用户单击 link 和 href="#about"
)。我的控制器的相关部分如下所示:
@UserController = RouteController.extend({
action: ->
tabName = @params.hash
@state.set("activeTab", tabName)
@render("user")
})
所以,基本上我需要 action
方法在 URL 哈希值发生变化时被调用。
afaik iron-router 不会对哈希更改做出反应。两条建议:
- 使用
window.addEventListener()
捕捉哈希变化 - 在选项卡本身上实施事件
选项 (1) 的优点是如果有人共享 link。
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
方法本身是反应式的,它将在哈希更改时重新获得 运行。