考虑一个简单的index.html
:
<body>
<h1>Example</h1>
<ng-view></ng-view>
...
使用以下路由初始化代码:
void routeInitializer(Router router, RouteViewFactory viewFactory) {
viewFactory.configure({
'hello': ngRoute(
path: '/hello',
view: 'view/hello.html'),
'default': ngRoute(
defaultRoute: true,
path: '/default',
view: 'view/default.html')
});
};
访问index.html
时未显示任何视图,除非我添加
..factory(NgRoutingUsePushState,
(_) => new NgRoutingUsePushState.value(false))
到我的AngularModule()
初始化,在这种情况下会显示默认视图(这就是我想要的)。为什么要添加此NgRoutingUsePushState
配置?
答案 0 :(得分:2)
这可能是onPopState
模式实施的错误。例如,onHashChange
在页面首次加载时不会触发事件,因此有一行来处理初始加载:
https://github.com/angular/route.dart/blob/master/lib/client.dart#L652
实现此功能时onPopState
确实在页面加载时触发了事件,因此不需要相同的hack,但这可能已经改变。不幸的是,目前的测试套件中没有对此进行测试。
来自:https://developer.mozilla.org/en-US/docs/Web/API/Window.onpopstate
浏览器倾向于在页面加载时以不同方式处理popstate事件。 Chrome和Safari总是在页面加载时发出popstate事件,但Firefox不会。
这需要仔细研究如何在Dart中处理这个问题。
待续......
更新
为route_hierarchical提交了一个修补程序:https://github.com/angular/route.dart/commit/9796e36fb0c6eee98e6754203ea5cfbb740b3121
答案 1 :(得分:1)
不需要添加NgRoutingUsePushState。我已经将下面的代码段添加到我的主控制器作为临时修复,直到错误得到解决。相关链接:https://code.google.com/p/dart/issues/detail?id=18067
import 'dart:js';
import 'dart:html';
class MainController {
MainController(NgRoutingHelper helper) {
Event popStateEvent = new Event.eventType('PopStateEvent', 'popstate');
context['window'].dispatchEvent(popStateEvent);
}
}