AngularJS监听路由变化

  使用AngularJS时,当路由发生改变时,我们需要做某些处理,此时可以监听路由事件,常用的是$routeStartChange, $routeChangeSuccess。完整例子如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>AngularJS监听路由变化</title>
</head>
<body ng-app="ngRouteExample">
    <div id="navigation">  
      <a href="#/home">Home</a>
      <a href="#/about">About</a>
    </div>
      
    <div ng-view></div>

    <script type="text/ng-template" id="home.html">
      <h1> Home </h1>
      <table>
        <tbody>
          <tr ng-repeat="x in records" style="background:#abcdef;">
            <td>{{x.Name}}</td>
            <td>{{x.Country}}</td> 
          </tr>          
        </tbody>
      </table>
    </script>

    <script type="text/ng-template" id="about.html">
      <h1> About </h1>
      <p>在输入框中尝试输入:</p>
      <p>姓名:<input type="text" ng-model="name"></p>
      <p>你输入的为: {{name}}</p>
    </script>

    <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
    <script src="http://apps.bdimg.com/libs/angular-route/1.3.13/angular-route.js"></script>
    <script type="text/javascript">
    angular.module('ngRouteExample', ['ngRoute'])
    .config(function ($routeProvider) {
        $routeProvider.
        when('/home', {
            templateUrl: 'home.html',
            controller: 'HomeController'
        }).
        when('/about', {
            templateUrl: 'about.html',
            controller: 'AboutController'
        }).
        otherwise({
            redirectTo: '/home'
        });
    })
    .run(['$rootScope', '$location', function($rootScope, $location) {
        /* 监听路由的状态变化 */
        $rootScope.$on('$routeChangeStart', function(evt, next, current){
          console.log('route begin change');
        }); 
        $rootScope.$on('$routeChangeSuccess', function(evt, current, previous) {
          console.log('route have already changed :'+$location.path());
        }); 
    }])
    .controller('HomeController', function ($scope) { 
       $scope.records = [{
          "Name" : "Alfreds Futterkiste",
          "Country" : "Germany"
        },{
          "Name" : "Berglunds snabbköp",
          "Country" : "Sweden"
        },{
          "Name" : "Centro comercial Moctezuma",
          "Country" : "Mexico"
        },{
          "Name" : "Ernst Handel",
          "Country" : "Austria"
        }]
    })        
    .controller('AboutController', function ($scope) { 
      $scope.name = '呵呵';
    });
</script>    
</body>
</html>

上述的例子是AngularJS 1的,对于Angular2是否也可以用,还没尝试过,有机会验证了再记录下咯~~

posted @ 2017-03-04 12:12  浅岸  阅读(6967)  评论(0编辑  收藏  举报