RÉSOLU:
Résolution ici: https://stackoverflow.com/a/29662815/4004456
Le plugin Batarang Chrome a déclenché toutes les actions ng-click deux fois. Rien de mal avec mon code … Batarang me doit un après-midi …
REMARQUE: J'ai tenté toutes les corrections dans: Combattre AngularJS exécutant le contrôleur deux fois
EDIT: quelque chose d'étonnant:
Il semble que tous les contrôleurs soient initialisés à deux reprises, car cela n'a aucune importance sur les appels de visualisation qui fonctionnent, il se lance deux fois, c'est ce qui m'a amené à croire que c'est un problème dans le fichier app.js.
EDIT: résolutions que j'ai tenté:
Mon problème, cependant, est presque identique à la question ci-dessus, mes contrôleurs fonctionnent deux fois à l'aide du bouton.
J'ai essayé de configurer un plunkr, mais le code est trop complexe pour que je fonctionne correctement … J'ai effacé tous les effets du code ci-dessous. Index.html
<section ng-show="!stateIsLoading"> <div ng-view></div></section> <section class="colorful" ng-hide="!stateIsLoading"> <three-bounce-spinner></three-bounce-spinner> </section>
App.js
'use strict'; /** * @ngdoc overview * @name smcmsApp * @description * # smcmsApp * * Main module of the application. */ angular .module('smcmsApp', [ 'ngAnimate', 'ngAria', 'ngCookies', 'ngMessages', 'ngResource', 'ngRoute', 'ngSanitize', 'ngTouch', 'ui.bootstrap', 'angular-spinkit', 'restangular' ]) .config(function ($routeProvider, RestangularProvider) { $routeProvider .when('/', { templateUrl: 'views/main.html', controller: 'MainCtrl' }) .when('/about', { templateUrl: 'views/about.html', controller: 'AboutCtrl' }) .when('/sales', { templateUrl: 'views/sales.html', controller: 'SalesCtrl', resolve: { mailers: function (API) { return API.mailers.getList(); }, totals: function (Restangular) { return Restangular.all('profit').customGET(); } } }) .when('/design', { templateUrl: 'views/design.html', controller: 'DesignCtrl', resolve: { design: function (API) { return API.design.getList(); } } }) .otherwise({ redirectTo: '/' }); RestangularProvider.setBaseUrl('http://localhost/SMCMS_Angular/api/Slim/'); }) .run(function ($rootScope, $log) { $rootScope.stateIsLoading = false; $rootScope.$on('$routeChangeStart', function () { console.log("route change start"); $rootScope.stateIsLoading = true; }); $rootScope.$on('$routeChangeSuccess', function () { console.log("route change success"); $rootScope.stateIsLoading = false; }); $rootScope.$on('$routeChangeError', function () { //catch error console.log("Route changing animation error"); }); });
DesignCtrl.js
angular.module('smcmsApp') .controller('DesignCtrl', function ($scope, $log, design, Notifications, Data) { /* ------------------------- Order Interactions --------------- */ $scope.saveOrder = function (order) { Notifications.addAlert('error', 'called showModal() from design.js'); $log.debug("called showModal() from design.js"); }; });
Views / design.html
<label ng-click="saveOrder(order)" class="btn btn-default">Save Details <span class="glyphicon glyphicon-floppy-open"></span>
Je crois que le problème réside dans la façon dont l'application gère pendant l'initialisation. Si vous naviguez vers votre application http://example.com/ alors votre url sera une chaîne vide et déclenchera le changement d'itinéraire. Une fois qu'il ne parvient pas à le résoudre, il sera alors remplacé par le contraire et provoquera la double modification / initialisation de l'itinéraire.
Fondamentalement, si vous déclenchez la route vous-même lors de la charge, vous ne devriez pas voir le double changement. Vous pouvez simplement injecter le service de $location
et diriger vous-même à l'intérieur de la course en supposant que vous voulez commencer à n'importe quel point donné. (Voir le plunk: http://plnkr.co/edit/lTOSYX?p=preview )
.run(function ($rootScope, $log, $location) { $location.path('/');//Add this // continue code here });
Si vos contrôleurs sont à double charge, vous avez probablement d'autres complications, comme le problème de déclaration / exécution double contrôle mentionné dans la note ( Combattre le contrôleur d'exécution AngularJS deux fois ).