在dart中路由器没有捕获window.location.assign()

时间:2015-04-01 13:43:55

标签: html5 dart dart-html

我尝试使用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>
...

2 个答案:

答案 0 :(得分:1)

onPopState是错误的事件。只有在导航到现有历史记录条目(back,forward,pushState,转到历史记录中的第2个条目)时才会触发此事件。 您正在寻找的可能是window.onHashChange事件。

答案 1 :(得分:1)

好看,我假设上述行为并没有实现我的目标。

感谢GüntherZöchbauer的帮助。 我提交了相应的Github project,因为我认为它应该有效。

我现在使用的是什么,包括历史支持在内的是什么

router.gotoUrl('/relativePath')

在onButtonClick处理程序中。 这完全是这样的。