angularjs:防止路由更改
我已尝试在控制器中执行以下操作:angularjs:防止路由更改,angularjs,angularjs-controller,Angularjs,Angularjs Controller,我已尝试在控制器中执行以下操作: $scope.$on("$routeChangeStart", function (event, next, current) { if (!confirm('are you sure ?')) { event.preventDefault(); } }); 但它不起作用。难道不应该这样做吗 我会在你的链接上添加一条指令,在更改路线之前应该确认。 我只是在JSFIDLE中原型化了它,我
$scope.$on("$routeChangeStart", function (event, next, current) {
if (!confirm('are you sure ?')) {
event.preventDefault();
}
});
但它不起作用。难道不应该这样做吗 我会在你的链接上添加一条指令,在更改路线之前应该确认。 我只是在JSFIDLE中原型化了它,我没有测试它。但我认为,这应该是正确的方式
(function (angular) {
module = angular.module('confirm', []);
ConfirmDirective = function () {
return {
restrict: 'A',
link: function (scope, elm, attrs, ctrls) {
angular.element(elm).bind('click', function (event) {
alert("Sure?");
event.preventDefault();
return false; //or true, depends on you
});
}
};
};
module.directive("confirm", ConfirmDirective);
}(angular));
检查并尝试一下
关于我最终使用了ui路由器,因此我的做法是:
$scope.$on('$stateChangeStart', function (event) {
if (!confirm('are you sure ?')) {
event.preventDefault();
}
});
这很好,但这不是我想要的。我需要注意路线的变化。这包括当用户点击浏览器的后退按钮时。您可能还希望捕获所有路线更改,并且向每个链接添加确认看起来并不是最好的方法。您在哪里这样做?你能发布一个JSFIDLE吗?您可能希望在$rootScope上执行此操作。我建议把它放在你的应用程序引导程序本身的地方。发布一个JSFIDLE,我会尝试为您修复它。您真好,但我最终使用了ui路由器,所以我不得不使用$stateChangeStart,这很有效。