controller - mvc - otherwise angularjs
AngularJs: el controlador se llama dos veces al usar $ routeProvider (11)
El mío fue el caso de tener 2 directivas ng-view. Intenté envolverlo, pero lo dupliqué involuntariamente:
<div class="ng-view">
<div ng-view></div>
</div>
Se quitó la envoltura, se arregló.
Rutas del módulo:
var switchModule = angular.module(''switchModule'', []);
switchModule.config([''$routeProvider'', function($routeProvider) {
$routeProvider.
when(''/build-content'', {templateUrl: ''build-content.html'', controller: BuildInfoController});
}]);
Controlador:
function BuildInfoController($http, $scope){
alert("hello");
}
Html:
<html ng-app="switchModule">
...
<body>
<ul>
<li><a href="#build-content"/></a></li>
</ul>
<div class="ng-view"></div>
</body>
...
Cada vez que hago clic en el hipervínculo '''', se llamará ''BuildInfoController'' dos veces. ¿Me estoy perdiendo de algo?
Elimine la directiva ng-controller
de sus páginas de plantilla si existe.
He tenido un problema similar. Encontré agregar una barra inclinada en la ruta, pero no en el enlace funcionó como se esperaba.
$routeProvider.
when(''/build-content/'',...);
Con este marcado
<li><a href="/build-content">Content</a></li>
Y luego AngularJS corregirá la URL en el navegador a lo que se define en $ routeProvider.
Extrañamente, lo opuesto parece funcionar también con una barra inclinada en el enlace y no en la ruta. ¡Parece siempre que las barras posteriores no coincidan con las resoluciones y el controlador no se invocará dos veces!
Hoy tuve el mismo problema. Había agregado el nombre del controlador en mi $ routeProvider y también en mi html.
$routeProvider
.when(''/login'', {
controller: ''LoginController'',
templateUrl: ''html/views/log-in.html''
})
y en mi opinión como
<div class="personalDetails" ng-controller="LoginController"> </div>
Puede eliminar el nombre del controlador de su vista o de su proveedor de ruta.
Same Here Mine era un caso de tener 2 directivas ng-view.
enter code here
Se eliminó el duplicado, es decir, ng-view, se arregló.
Se puede agregar un controlador a más de un elemento del DOM, por lo que este problema puede ocurrir si esto se ha hecho, por ejemplo:
<div id="myDiv1" ng-controller="myController" ....></div>
....
<div id="myDiv2" ng-controller="myController" ....></div>
Tuve el mismo problema y me di cuenta de que si le cortas dos veces el angular, puedes tener el mismo error.
En mi caso, tuve <body ng-app>
pero también angular.bootstrap(document,[''app''])
y eso causó la inicialización doble de los controladores.
Espero que esto pueda ahorrarle algo de tiempo a alguien.
Tuve el mismo problema, y parece que hay un error estúpido con el enrutamiento. Hay algún tipo de redirección pasando.
para arreglarlo, acabo de agregar una barra en el href, como:
<li><a href="#/build-content/"></a></li>
Espero que también arregle las cosas para ti.
Tuve la declaración de SomeController para cada vista parcial en un solo estado. Eso causó la duplicación de eventos por evento.
.state(''chat'', {
url: ''/'',
views: {
''content@'': {
templateUrl: ''views/chat_wv1.html'',
controller: ''ChatController''
},
''form@'': {
templateUrl: ''views/chat_wv_placeholder.html'',
controller: ''ViewController''
},
''sidePanel@'': {
templateUrl: ''views/sidePanel_wv.html''
/* removing this part solved my issue*/
/*controller: ''ChatController''*/
}
}
})
Espero que esto ayude a alguien más.
Yo también tuve un problema similar con un controlador customDirective y unitentionally duplicado.
<html>
<body ng-app="MyApp" ng-controller="MyDirectiveCtrl">
<my-directive></my-directive>
</body>
</html>
angular.directive(''myDirectivie'', [function() {
return {
restrict: ''E'',
controller: ''MyDirectiveCtrl'',
...
}
}]);
Lo resolví quitando la etiqueta ng-controller a nivel del cuerpo
es porque tienes múltiples ui-view