2013-12-08 115 views
18

我正在做类似于下面的应用程序,但我只是无法获取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但不是完全的工作...

问候 基兰

+0

'ui.router'不适用于'ngRoute'。请使用其中一个或另一个。 –

回答

41

请查看这个wiki:State Change Events。摘录:

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

    $范围。在$( '$ stateChangeSuccess',
    功能(事件,使用toState,toParams,fromState,fromParams){...})

因此而不是$routeChangeSuccess使用$stateChangeSuccess

要获取有关所有可用事件的更多详细信息,请查看wiki Events在这里你可以发现适合你,可能是事件$viewContentLoaded ...现在

+0

谢谢! $ viewContentLoaded是我正在寻找的。顺便说一句,我无法获得事件$ viewContentLoading。不知道为什么。但$ viewContentLoaded可以正常工作 – Kiran

+0

类似地,请查看'$ stateChangeStart'。 – weltschmerz

0

stateChange活动已被取消,删除,使用transitions代替。

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