Приложение AngularJS запускается дважды (пробовали обычные решения..)

РЕШЕННО:

Разрешение здесь: qaru.site/info/14707/...

Плагин Chrome Batarang дважды запускал все действия ng-click. Ничего плохого в моем коде. Батаран должен мне днем ​​...

ПРИМЕЧАНИЕ. Я попытался исправить все исправления в: дважды в два раза удваивать выполнение контроллера.

EDIT: что-то озадачивающее:

Кажется, что все контроллеры инициализированы дважды, так как неважно, какой вид вызывает то, какая функция, его его дважды запускают, вот почему я считаю, что это проблема в файле app.js.

EDIT: разрешения, которые я пытался:

  • Я попытался удалить зависимости бауера один за другим, чтобы исключить зависимость, вызывающую его.
  • Я очистил свой код для двойного контроллера init (как в index.html, так и снова в init/bootstrap).
  • Я удалил свои пользовательские директивы один за другим, чтобы избежать дублирования "ограничения:" /контроллера.
  • Я удалил все заявления ng-if из приложения.
  • Выбрали все html для дублирования ng-view/ui-view и т.д.
  • Пробовал все комбинации маршрутов + ссылки, имеющие и не имеющие завершающих косых черт.

Однако моя проблема почти идентична вышеупомянутому вопросу, мои контроллеры дважды запускают функции при нажатии кнопки.

Я попытался настроить 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>

Ответ 1

Я считаю, что проблема заключается в способе обработки приложения во время инициализации. Если вы перейдете к своему приложению http://example.com/, то ваш url будет пустой строкой и вызовет изменение маршрута. После того, как он не сможет решить проблему, он затем ударит в противном случае и вызовет изменение/инициализацию двойного маршрута.

В принципе, если вы запускаете маршрут самостоятельно при загрузке, вы не должны видеть двойное изменение. Вы можете просто ввести службу $location и направить туда себя внутри прогона, предполагая, что вы хотите начать с любой заданной точки. (см. plunk: http://plnkr.co/edit/lTOSYX?p=preview)

.run(function ($rootScope, $log, $location) {
    $location.path('/');//Add this
    // continue code here
});

Если ваши контроллеры имеют двойную загрузку, тогда у вас, вероятно, есть другие сложности, такие как проблема с объявлением/выполнением двойного контроллера, упомянутая в примечании (дважды с одновременным управлением контроллером AngularJS).