已解决:
此处的决议: https://stackoverflow.com/a/29662815/4004456
Batarang Chrome插件两次点击所有ng-click操作。我的代码没有错.Batarang欠我一个下午......
注意:我尝试了所有修复:Combating AngularJS executing controller twice
编辑:令人费解的事情:
似乎所有控制器都被初始化了两次,因为哪个视图调用哪个函数并不重要,它被触发了两次,这就是让我相信它是app.js文件中的问题.. < / p>
编辑:我尝试过的决议:
然而,我的问题几乎与上述问题相同,我的控制器在按钮点击时两次触发功能。
我试图设置一个plunkr,但代码太复杂了,我无法正常工作..我已经从下面的代码中删除了任何臃肿。 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>
答案 0 :(得分:0)
我认为问题在于初始化期间app处理的方式。如果您导航到您的应用程序http://example.com/,那么您的网址将是一个空字符串并触发路由更改。在无法解决之后,它将点击其他方式并导致双路径更改/初始化。
基本上,如果您在加载时自行启动路线,则不应看到双重更改。您可以注入$location
服务并在运行中直接指向您,假设您想要从任何一个给定点开始。 (见插件:http://plnkr.co/edit/lTOSYX?p=preview)
.run(function ($rootScope, $log, $location) {
$location.path('/');//Add this
// continue code here
});
如果您的控制器是双重加载,那么您可能还有其他复杂情况,例如注释(Combating AngularJS executing controller twice)中提到的双控制器声明/执行问题。