2015-12-04 5 views
4

У меня есть простой контроллер (logincontroller), который запускается дважды при загрузке login.html, однако я не знаю, почему это происходит.Контроллер дважды запускается

MyApp.js:

angular.module('PVM', [ 
    'Authentication', 
    'Modal', 
    'ngRoute' 
]) 
.config([ 
    '$routeProvider', function($routeProvider) { 
     $routeProvider 
      .when('/Login', { 
       controller: 'LoginController', 
       templateUrl: 'Login.html' 
      }) 
      .when('/Home', { 
       controller: 'ModalController', 
       templateUrl: 'Home.html' 
      }) 
      .otherwise({ 
       redirectTo: '/Login' 
      }); 
    } 
]); 

LoginController.js:

angular.module("Authentication") 
.controller("LoginController", 
[ 
    "$scope", "$rootScope", "$location", "AuthenticationService", 
    function($scope, $rootScope, $location, AuthenticationService) { 
     AuthenticationService.ClearCredentials(); 

     $scope.login = function() { 

      var foo = "bar"; //Breakpoint hits here twice when loading login.html 
     }; 
    } 
    ]); 

index.html:

<!DOCTYPE html> 
<html ng-app="PVM"> 
<head> 
<title>My Ang</title> 
<link href="Content/bootstrap.min.css" rel="stylesheet" /> 
<link href="Content/bootstrap-theme.min.css" rel="stylesheet" /> 
<link href="Content/MyCss.css" rel="stylesheet" /> 
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> 

</head> 
<body> 
<div> 
<div ng-view></div> 
</div> 


<script src="//code.jquery.com/jquery-2.0.3.min.js"></script> 
<script src="Scripts/bootstrap.min.js"></script> 
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-beta.2/angular.min.js"></script> 
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-beta.2/angular-route.min.js"></script> 
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-beta.2/angular-animate.min.js"></script> 
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-beta.2/angular-cookies.min.js"></script> 
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.14.3/ui-bootstrap-tpls.min.js"></script> 


<script src="Scripts/Services/ModalService.js"></script> 
<script src="Scripts/Services/AuthenticationService.js"></script> 
<script src="Scripts/Controller/LoginController.js"></script> 
<script src="Scripts/Controller/ModalController.js"></script> 
<script src="Scripts/MyApp.js"></script> 


</body> 
</html> 

login.html:

<div class="container centeredDiv" ng-controller="LoginController"> 
    <p>Login page</p> 
</div> 
+0

Это потому, что вы создаете экземпляр контроллера дважды: один раз в своем '$ routeProvider' и еще раз, на ваш взгляд, через' ng-controller' –

ответ

5

Поскольку контроллер получает выполняется в 2-х местах.

  1. От login.html - нг-контроллер

    <div class="container centeredDiv" ng-controller="LoginController"> 
        <p>Login page</p> 
    </div> 
    
  2. От контроллера связан с маршрута -/Вход

    .when('/Login', { 
        controller: 'LoginController', 
        templateUrl: 'Login.html' 
    }) 
    

Как исправить? Вы должны удалить атрибут ng-controller из login.html

+0

И подходит ли он для этого? – MrProgram

+1

Вы должны удалить ng-controller из login.html. См. Мой обновленный ответ. – nikhil

0

Вам не нужен ng-контроллер в вашем шаблоне login.html, потому что он находится на вашем маршруте. Просто удалите его, и это должно сделать трюк.

+0

Какой в ​​принципе то, что сказал нихил! – Mil4n

+0

Вы правы. такой же ответ – Maccurt

Смежные вопросы