希望任何angularjs大师都可以帮助我。这是我的angularjs代码
$scope.$on('$routeChangeStart', function(event, next, current) {
if ($scope.myForm.$dirty) {
if(!confirm("Unsaved, do u want to continue?")) {
event.preventDefault();
}
}
});
当数据变脏时,它会在浏览器后退按钮中发出警告,但是当点击取消或确定时,它仍然会完成路线更改。event.preventDefault()
之类的内容无法正常工作。
任何人都可以指出可能出错的地方
答案 0 :(得分:32)
我很难找到这个,但是你可以听“$ locationChangeStart”事件而不是“$ routeChangeStart”事件,为此可以防止默认:
$scope.$on("$locationChangeStart", function(event, next, current) {
if (!confirm("You have unsaved changes, continue navigating to " + next + " ?")) {
event.preventDefault();
}
});
您也可以始终阻止默认,存储“下一步”,并显示一个干净的JS模态并异步决定。
$ locationChangeStart目前未记录,但在此处引用:https://github.com/angular/angular.js/issues/2109
答案 1 :(得分:5)
正好在Angular 1.3.7之后修复 https://code.angularjs.org/1.3.7/docs/api/ngRoute/service/ $路线
<强> $ routeChangeStart 强> 在路线改变之前广播。此时,路由服务开始解决路由更改发生所需的所有依赖关系。通常,这涉及获取视图模板以及解析路由属性中定义的任何依赖项。一旦解决了所有依赖关系,就会触发$ routeChangeSuccess。
可以通过调用事件的preventDefault方法来阻止路由更改(以及触发它的$ location更改)。有关事件对象的更多详细信息,请参阅$ rootScope.Scope。
答案 2 :(得分:3)
根据AngularJS docs(请参阅$ broadcast),您只需无法取消广播类型的事件($routeChangeStart属于此类型):
事件生命周期从$ broadcast的范围开始 调用。所有侦听此范围内的名称事件的侦听器都会获得 收到通知。之后,事件传播到所有直接和间接 当前范围的范围并调用所有已注册的侦听器 方式。该活动无法取消。
答案 3 :(得分:2)
此问题已在最新版本(&gt; = 1.3.8)中修复。
由于提供给$ routeChangeStart的参数更详细(通常更有用),如果可能,请尝试更新角度版本......
答案 4 :(得分:0)
如果您使用$stateProvider
,问题可能会持续存在。
在这种情况下使用:
$scope.$on('$stateChangeStart', function( event){
.....
event.preventDefault();
});
&#13;