我有一个带有以下路线的角度2应用程序:
@RouteConfig([
new Route({ path: '/', component: Home, name: 'Home', useAsDefault: true}),
new Route({ path: '/employees', component: ViewEmployees, name: 'ViewEmployees'}),
new Route({ path: '/employees/add', component: AddEmployee, name: 'AddEmployee'}),
])
等等.当我以下列方式更改路线时:
<a [routerLink]="['ViewEmployees']">View Employees</a>
没有问题.我可以从主页或AddEmployee路由以这种方式更改路由.当我进入AddEmployee路由并尝试以编程方式更改路由时,问题就出现了:
import {Router} from 'angular2/router';
...
constructor(private _router:Router) {}
...
navigate() {
this._router.navigate(['ViewEmployees']);
}
它不起作用.它将我发送到ViewEmployees视图,然后重新加载整个应用程序.如果我从Home组件执行相同的程序化路由更改,我没有任何问题;该应用程序不会重新加载.
有没有人有任何想法为什么它会在这一个案例中这样做?我需要它才能工作,以便我可以保存已添加的员工,然后返回员工列表视图.
在此先感谢您的帮助!
最佳答案 你是否在< form>中调用navigate()?标签?
我有同样的问题.在Angular2s GitHub上存在一些描述此行为的问题,但它们都已关闭,因为它们属于旧路由器.当您在窗体内的提交按钮调用的函数内使用router.navigate()时,似乎会发生页面重新加载.这可能会导致浏览器追加?在URL的末尾并重新加载它.
解决方案非常简单:只需在navigate()函数结束时返回false.这可以防止bowser在提交表单时使用它的默认操作.通常角度会停止这种默认行为,但奇怪的是不会出现这种情况.