我有下一个路线的AngularJS应用程序:
/user/:userId
用户打开
http://localhost/#/user/1
在浏览器中。然后他在网址栏中将userId
值从1
更改为2
,然后按Enter键。
我的问题是:如何挂钩这一刻并且不重新加载控制器?例如,我只想在同一页面上显示带有新userId
值的消息(或执行alert()或console.log())。
答案 0 :(得分:1)
您可以收听'$stateChangeStart'
event并致电event.preventDefault()
以阻止用户实际转到新视图。
$rootScope.$on('$stateChangeStart',
function(event, toState, toParams, fromState, fromParams){
event.preventDefault();
// transitionTo() promise will be rejected with
// a 'transition prevented' error
});
注意,如果要在控制器中添加此侦听器,则应保留对注销功能的引用,以便在销毁范围时删除侦听器。
var removeListenerFn = $rootScope.$on('$stateChangeStart',
function(event, toState, toParams, fromState, fromParams){
event.preventDefault();
// transitionTo() promise will be rejected with
// a 'transition prevented' error
}
);
$scope.$on('$destroy',function(){
removeListenerFn();
});
以下是一个示例Plunker,您可以使用它来测试它:http://plnkr.co/edit/lYfkPuePGv1GlN1sFjW4?p=preview