为什么$ routeChangeSuccess永远不会被调用?

时间:2013-12-08 14:16:12

标签: angularjs angular-ui angular-ui-router

我在我的应用程序上做了类似于下面的操作,但我无法获得routeChangeSuccess事件。

var myapp = angular.module('myapp', ["ui.router", "ngRoute"]);

myapp.controller("home.RootController",
  function($rootScope, $scope, $location, $route) {
    $scope.menus = [{ 'name': 'Home ', 'link': '#/home'}, {'name': 'services', 'link': '#/services'} ]

    $scope.$on('$routeChangeSuccess', function(event, current) {

      alert('route changed');
    });

  }
);

myapp.config(
  function($stateProvider, $urlRouterProvider, $routeProvider) {
    $urlRouterProvider.otherwise("/home");
    $stateProvider
      .state('home', {
        url: "/home",
        //template: '<h1>Home Screen</h1>'
        templateUrl: "/Client/Views/Home/Home.htm"
      })
      .state('services', {
        url: "/services",
        //template: '<h1>Service screen</h1>'
        templateUrl: "/Client/Views/Home/service.htm"

      });
  });

如下非常简单的html也失败

  <body ng-controller="home.RootController">

    <ul class="nav">
      <li ng-repeat="menu in menus" "="">
        <a href="{{menu.link}}">{{menu.name}}</a>
      </li>
    </ul>
    <div ui-view> No data yet!</div>
  </body>

但是当我点击链接时,我看到视图正在更新,但$ routeChangeSucces事件从未被触发。

有什么我想念的吗?

另一个问题我有一个事件,我可以挂钩知道视图已经准备就绪,所以我可以开始一些额外的处理,比如document.ready()。

plnlr但未完全正常工作......

此致 基兰

2 个答案:

答案 0 :(得分:42)

请检查此维基:State Change Events。提取物:

  • $ stateChangeSuccess - 状态转换完成后触发。

    $ $范围上(&#39; $ stateChangeSuccess&#39 ;,
    function(event,toState,toParams,fromState,fromParams){...})

因此,而不是$routeChangeSuccess使用$stateChangeSuccess

要获取有关所有可用事件的更多详细信息,请查看wiki Events在这里您可以找到适合您的活动,可以是活动$viewContentLoaded ......

答案 1 :(得分:0)

stateChange个事件现已弃用并已删除,请改用transitions

$transitions.onSuccess({}, function () {
    console.log("state changed");
});