AngularJS,钩子URL更改

时间:2014-10-10 13:56:46

标签: angularjs

我有下一个路线的AngularJS应用程序:

/user/:userId

用户打开

http://localhost/#/user/1
在浏览器中

。然后他在网址栏中将userId值从1更改为2,然后按Enter键。

我的问题是:如何挂钩这一刻并且不重新加载控制器?例如,我只想在同一页面上显示带有新userId值的消息(或执行alert()或console.log())。

1 个答案:

答案 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