web-dev-qa-db-fra.com

pourquoi $ routeChangeSuccess n'est jamais appelé?

Je fais quelque chose de similaire à ci-dessous sur mon application, mais je ne peux tout simplement pas obtenir l'événement 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"

      });
  });

un html très simple comme ci-dessous échoue également

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

mais quand je clique sur le lien, je vois que les vues sont mises à jour mais que l'événement $ routeChangeSucces n'est jamais déclenché.

y a-t-il quelque chose qui me manque?

Une autre question que j’ai eue est la suivante: existe-t-il un événement auquel je peux m'attacher pour savoir que la vue est prête afin de pouvoir lancer un traitement supplémentaire, comme document.ready ().

plnlr mais ne fonctionne pas complètement ...

Cordialement Kiran

18
Kiran

S'il vous plaît, consultez ce wiki: Événements de changement d'état . Un extrait: 

  • $ stateChangeSuccess - déclenché une fois la transition d'état terminée.

    $ scope. $ on ('$ stateChangeSuccess',
    function (événement, toState, toParams, fromState, fromParams) {...})

Donc, au lieu du $routeChangeSuccess, utilisez le $stateChangeSuccess.

Pour obtenir des informations plus détaillées sur tous les événements disponibles, consultez le wiki Événements . Vous pouvez trouver ici que le plus approprié pour vous, pourrait être l'événement $viewContentLoaded...

42
Radim Köhler

Les événements stateChange sont maintenant obsolètes et supprimés, utilisez plutôt transitions .

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