45 votes

AngularJs: le contrôleur est appelé deux fois à l’aide de $ routeProvider

Itinéraires du module:

 var switchModule = angular.module('switchModule', []);

switchModule.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
    when('/build-content', {templateUrl: 'build-content.html', controller: BuildInfoController});
 

}]);

Manette:

 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>
...
 

Chaque fois que je clique sur l'hyperlien '', le 'BuildInfoController' sera appelé deux fois. Est-ce que j'ai râté quelque chose?

72voto

dip Points 136

J'ai eu le même problème aujourd'hui. J'avais ajouté le nom du contrôleur dans mon $ routeProvider et aussi dans mon HTML.

 $routeProvider
    .when('/login', {
            controller: 'LoginController',
            templateUrl: 'html/views/log-in.html'
     })
 

et à mon avis comme

Vous pouvez supprimer le nom du contrôleur de votre vue ou de votre fournisseur d'itinéraire.

42voto

mpm Points 10669

J'ai eu le même problème, et il semble qu'il y ait un bogue stupide avec le routage. Il y a une sorte de redirection en cours.

pour résoudre ce problème, je viens d'ajouter une barre oblique dans le href, comme:

 <li><a href="#/build-content/"></a></li>
 

J'espère que ça va arranger les choses pour vous aussi.

16voto

Dan Points 657

J'ai eu un problème similaire. J'ai trouvé l'ajout d'une barre oblique dans la route, mais pas dans le lien a fonctionné comme prévu.

$routeProvider.
when('/build-content/',...);

Avec cette balise

<li><a href="http://stackoverflow.com/build-content">Content</a></li>

Et puis AngularJS va corriger l'URL dans le navigateur pour ce qui est défini dans l' $routeProvider.

Bizarrement, le contraire semble trop de travail avec une barre oblique dans le lien et pas dans l'itinéraire. Il semble aussi longtemps que les barres obliques ne pas correspondre à la résout et le contrôleur ne sera pas appelé deux fois!

8voto

Josh Ribakoff Points 617

Le mien était un cas d'avoir des directives de 2 ng-view. J'ai essayé de l'envelopper, mais je l'ai dupliqué par inadvertance:

 <div class="ng-view">
    <div ng-view></div>
</div>
 

Suppression de l'emballage, correction du problème.

2voto

Valentyn Shybanov Points 8483

J'ai eu le même problème et a constaté que si vous vous amorcez angulaire deux fois, vous pouvez avoir la même erreur.

Dans mon cas, j'avais <body ng-app> mais aussi angular.bootstrap(document,['app']) et cela provoquait une double initialisation des contrôleurs.

J'espère que cela peut faire gagner du temps à quelqu'un.

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