4 votes

le contrôleur angularjs s'exécute deux fois

Une question similaire a été posée aquí mais ça ne m'a pas aidé.

J'apprends angularjs et j'ai remarqué que le contrôleur est exécuté deux fois.

J'ai un exemple très simple qui montre le comportement. aquí

J'ai construit cet exemple alors que j'apprenais les services et au début j'ai pensé que c'était l'injection des services dans le contrôleur mais j'ai commenté tout le code lié aux services et pourtant le contrôleur est exécuté deux fois.

Mon exemple fonctionne mais j'ai peur de faire quelque chose de mal.

<div ng-app="MyApp">
  <div ng-controller="MyCtrl">
    {{data1}} 
  </div>
</div>

var app = angular.module('MyApp', [])
app.service('Service1', function(){
  return {
    ajxResponse1: 'dataFromService1'
  };
 });

function MyCtrl($scope, Service1){
  alert('Entering MyCtrl');
  $scope.data1 = Service1.ajxResponse1;    
  alert('Exiting MyCtrl');
}

25voto

Ivan Koshelev Points 1535

Une source possible est la suivante : si vous utilisez le routage et spécifiez le contrôleur dans les routes, vous ne devez pas le spécifier dans le modèle que la route utilise. Nous avons eu ce problème lorsque ce point a été négligé.

4voto

Gloopy Points 16421

Votre contrôleur a été exécuté deux fois dans le fiddle parce qu'angular est référencé deux fois (une fois via la fonction Cadres et extensions et un autre en tant que Ressource externe ).

Voir ceci mise à jour du violon où j'ai retiré le Ressource externe et les alertes n'apparaissent qu'une fois.

Le code reste inchangé :

function MyCtrl($scope, Service1, Service2, Service3){
    alert('Entering MyCtrl');
    $scope.data1 = Service1.ajxResponse1;
    $scope.data2 = Service2.ajxResponse2;
    $scope.data3 = Service3.ajxResponse3;
    alert('Exiting MyCtrl');
}

1voto

chrismacp Points 2007

J'ai eu un problème similaire et il était dû à des barres obliques dans mon routage.

J'avais quelque chose comme /post{slug :[a-z0-9-]*/} pour ma route et lorsque je visitais la page à domain.com/post, elle redirigeait vers la version avec un slash à la fin.

J'ai mis du temps à comprendre !

Edit : En fait, je viens de jeter un coup d'oeil plus détaillé à votre code et j'ai remarqué qu'il n'y a pas de routage, donc ce n'est probablement pas la cause dans votre cas.

Cela pourrait être utile pour les personnes qui, comme moi, recherchaient une solution différente.

0voto

Achintya Ashok Points 453

Pour tous ceux qui utilisent rails et angularjs :

Le framework rails qui fait correspondre les URL aux vues et les charge entre en conflit avec le $route d'angularjs, même lorsque vous avez une application à vue unique.

Pour éviter la double charge de votre contrôleur : allez dans application.js et supprimez "//= require turbolinks

Vous êtes les bienvenus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X