我的主控制器的目标之一是防止用户访问其他用户的网址。监听 $locationChangeStart 并使用它的事件 preventDefault 方法非常有效。不幸的是,调用此方法有一个奇怪的副作用,即以某种方式“中断”函数“handleNotification”的工作,该函数的目标是在 2 秒内通知用户她或他做了非法的事情。如果我注释掉 event.preventDefault(),一切都会按预期进行。所以我的问题是:“默认” preventDefault 的“范围”是什么,它可以防止我没有想到并且使 handleNotification 功能无法正常工作?
$scope.$on('$locationChangeStart', function(event, newUrl, oldUrl) {
ifUserIs('loggedIn', function() {
if (newUrl.split('#/users/')[1] !== $scope.user.userId) {
handleNotification('alert', 'You are not allowed to go here.');
event.preventDefault();
}
});
});
function handleNotification (type, message) {
$scope.notice = {
content: message,
type: type
};
$timeout(function() {
delete $scope.notice;
return true;
}, 2000);
}