2017-01-16 1 views
1

J'utilise le routage angulaire dans mon code, pour lequel suit le fragment Snippet. Problème est que le contrôleur principal est appelé deux fois. J'ai déjà pris soin de ne pas le déclarer à nouveau dans le balisage (comme conseillé partout). Je soupçonne qu'il y a quelque chose qui ne va pas dans mon code de routage.Contrôleur appelé deux fois dans AngularJS

app.directive('routeLoadingIndicator', function ($rootScope,$timeout) { 
return { 
    restrict:'E', 
    link:function(scope, elem, attrs){ 
     scope.isRouteLoading = false; 

     $rootScope.$on('$routeChangeStart', function(){ 
      scope.isRouteLoading = true; 
     }); 
     $rootScope.$on('$routeChangeSuccess', function(){ 
      $timeout(function(){ 
       scope.isRouteLoading = false;      
      }, 10); 
     }); 
    } 
}; 
}); 

HTML:

 <route-loading-indicator > 
     <div class="spinner" ng-if='isRouteLoading'> 
      <div class="rectLoader"></div>     
     </div> 
    <div class="right_col" ng-if='!isRouteLoading' style="padding-top: 60px;" ng-view> 
    </div> </route-loading-indicator> 

Controller:

app.controller('main', function($scope,$routeParams,$rootScope){ 
    console.log("main Controller"); 
    }); 

code d'acheminement:

app.config(function($routeProvider) { 
$routeProvider 
    .when("/", { 
     templateUrl : "xyz.html", 
     controller : "main" 
    }) 
    }); 
+0

peut vous recréez la question dans un violon –

+0

Publier une exemple complet, un minimum de reproduire le problème. Incluez tous les éléments nécessaires et excluez tous les éléments irrelevants (comme votre routeLoadingIndicator). –

+1

Le code fonctionne correctement. vérifier ceci https://jsfiddle.net/ebinmanuval/c8u34s37/ –

Répondre

1

Oui droit en raison de

<div class="right_col" ng-if='!isRouteLoading' style="padding-top: 60px;" ng-view> 

ce code comme le cas de changement d'itinéraire de $ routeChangeStart et $ routeChangeSuccess vous valeur togging Par conséquent ng-si obtenir appelé deux fois mieux votre

ng vue

Supprimer ng-if de la directive ng-view peut vous aider ...

A ma façon ::: vous devrait aller avec spectacle et directive cacher .... :: Vous aimez cette

<div class="right_col" ng-show='!isRouteLoading' style="padding-top: 60px;" ng-view> 
+0

Je ne sais pas pourquoi, mais cela fonctionne ...! – HyperVol