我尝试使用route_hierarchical/client.dart
中的路由器来监听onpopstate事件,并在我的index.html中启用/禁用<div>
。 (stagehand.pub dart插件中的示例)
如果这是通过index.html中的普通<a href="/relativePath">
完成的,则可行。
但是如果我尝试通过我调用的button.onClick.listen()
处理程序来改变路径:
window.location.assign('/relativePath');
我得到404并且路由器没有正确处理我的事件。 该操作是否应该调用路由器捕获的popstate event,如here所述?
handlers.dart
...
button.onClick.listen((_){
window.location.assign('/about');
});
...
router.dart
var router = new Router();
router.root
..addRoute(name: 'about', path: '/about', enter: showAbout)
..addRoute(name: 'login', defaultRoute: true, path: '/', enter: showLogin)
..addRoute(name: 'context', path: '/context', enter: showContext);
router.listen();
}
void showAbout(RouteEvent e) {
// Extremely simple and non-scalable way to show different views.
querySelector('#login').style.display = 'none';
querySelector('#about').style.display = '';
querySelector('#context').style.display = 'none';
} ...
的index.html
...
<form>
<button type="button" id="submit" disabled="true" >
Login
</button>
</form>
...
答案 0 :(得分:1)
onPopState是错误的事件。只有在导航到现有历史记录条目(back,forward,pushState,转到历史记录中的第2个条目)时才会触发此事件。
您正在寻找的可能是window.onHashChange
事件。
答案 1 :(得分:1)
好看,我假设上述行为并没有实现我的目标。
感谢GüntherZöchbauer的帮助。 我提交了相应的Github project,因为我认为它应该有效。
我现在使用的是什么,包括历史支持在内的是什么
router.gotoUrl('/relativePath')
在onButtonClick处理程序中。 这完全是这样的。