2017-01-16 4 views
1

Ich verwende Angular-Routing in meinem Code, für die folgende ist der Code Snippet. Problem ist, dass der Hauptcontroller zweimal aufgerufen wird. Ich habe mich bereits darum gekümmert, es im Markup nicht mehr zu deklarieren (wie überall empfohlen). Ich vermute, dass in meinem Routing-Code etwas nicht stimmt.Controller zweimal aufgerufen in 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"); 
    }); 

Routing-Code:

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

können Sie das Problem in einer Geige –

+0

Stellen Sie ein komplettes, minimal Beispiel reproduziert das Problem neu zu erstellen. Enthalten Sie alle notwendigen Dinge und schließen Sie alle relevanten Dinge aus (wie zB Ihren routeLoadingIndicator). –

+1

Der Code funktioniert einwandfrei. Überprüfen Sie das https://jsfiddle.net/ebinmanuval/c8u34s37/ –

Antwort

1

Ja Recht wegen

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

dieser Code als auf dem Weg Änderungsereignis von $ routeChangeStart und $ routeChangeSuccess Sie togging Wert daher ng-wenn zweimal Ihr gecallt auch

ng-Ansicht

Entfernen ng-wenn aus ng-View-Direktive kann Ihnen helfen ...

In meiner Art und Weise ::: Sie gehen sollte zeigen und verbergen Richtlinie .... Like this ::

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

Ich weiß nicht warum, aber das funktioniert ...! – HyperVol

Verwandte Themen