角度控制器触发不止一次.只有某些

Angular Controllers Firing off more than once. Only certain ones

本文关键字:不止一次 控制器      更新时间:2023-09-26

我有如下标记,然后在不同的文件中定义了应用程序的不同部分。我遇到的问题是,加载时主应用程序页面上的控制器会导致每个嵌套控制器运行不止一次。我只需点击按钮就可以更改为任何状态,但每个状态都会触发2-3次。

<html ng-app="myApp">
<body ng-controller="myController">
<div ng-controller="dashController">
   <div ng-controller="listController">
   </div>
</div>
</body>
</html>

我的App.js

var myApp = angular.module('myApp', [
    'user.profile',
    'myApp.controllers',
    'myApp.directives',
    'ngCookies',
    'ngAutocomplete',
    'ui.router'
]).config(function($stateProvider, $urlRouterProvider, $locationProvider, $interpolateProvider) {
    $interpolateProvider.startSymbol('{[{').endSymbol('}]}');
    $urlRouterProvider.otherwise('/');
    $stateProvider.
        state('app', {
            url: '/app',
            templateUrl: '/views/homepage',
            controller: 'MyCtrl1'
        });
    $locationProvider.html5Mode(true);
});

myApp.控制器

angular.module('myApp.controllers', ['ui.router','ngCookies']).
  controller('myController', function ($scope, $http,$cookies) {
       $scope.message = 'nothing to see here, move along';
       if ($cookies.userdata) {
           $cookies.userdata = $cookies.userdata.replace("j:", "");
           console.log($cookies);
       }

  });

user.profile.js

angular.module('user.profile', [
        'user.controllers',
        'ngAnimate',
        'ngCookies',
        'ngResource',
        'ngSanitize',
        'nouislider',
        'ui.router',
        'ui.bootstrap',
        'ngLinkedIn'
    ])
    .config(function($stateProvider, $urlRouterProvider, $locationProvider,$interpolateProvider, $linkedInProvider) {
        $interpolateProvider.startSymbol('{[{').endSymbol('}]}');
        $linkedInProvider.set('appKey', '753pos06f998t3')
                         .set('scope', 'r_fullprofile');
                         //.set('authorize', true);
        $locationProvider.html5Mode(true);
        $stateProvider
            .state('userDashboard', {
                controller: 'dashController'
            })
            .state('userList', {
                views : {
                    'popup' : {templateUrl: '/views/app/user/list/userList'}
                },
                controller: 'listController'
            });
    });

user.controllers.js

angular.module('user.controllers', ['ui.router', 'ngAutocomplete', 'nouislider', 'ui.bootstrap', 'ngCookies', 'ngLinkedIn', 'angularFileUpload','cgPrompt'])
    .directive('onLastRepeat', function () {
        return function (scope, element, attrs) {
            if (scope.$last) setTimeout(function () {
                scope.$emit('onRepeatLast', element, attrs);
            }, 1);
        };
    }).
    controller('dashController', function ($scope, $state, $modal, $log, $http, $cookies) {
      $scope.user = [];
    }).
    controller('listController', function ($scope, $http, $cookies) {
    });

我的应用程序也不会初始化,除非我运行angular.bootstrap(document,["myApp"]);

我不认为它在$stateProvider和DOM中定义了控制器。。。如果我从DOM中删除,即使在控制器启动后,ng的单击也不会起作用。。。我还有一个ng点击,它改变了状态,它的控制器在stateProvider和DOM中定义,它不会触发两次。。。它所做的是先再次启动另外两个控制器,然后再继续它的操作。

问题是您使用routeProvider/stateProvider定义控制器,即:

$stateProvider.state('userDashboard', {
                controller: 'dashController'
            })
            .state('userList', {
                views : {
                    'popup' : {templateUrl: '/views/app/user/list/userList'}
                },
                controller: 'listController'
            });

您正在使用在DOM中重新定义它们

<div ng-controller="dashController">

删除其中一个,但不要同时使用这两个,我建议删除DOM中声明的那个,ng-controller="dashController"

欢呼