角度 - 控制器执行超过1次

时间:2014-09-05 06:55:53

标签: javascript angularjs

我之前已经知道了,但无法找到适合我的解决方案。 我让每个控制器启动3次!

这对我来说有问题,因为我的应用程序中有声音并且它有3次显示。

我是棱角分明的新人。我不知道它是否有意义,但我在一个文件controllers.js中定义了所有控制器。我检查文件app.js只调用一次。

这是我的app.js:

'use strict';

/* App Module */

var phonecatApp = angular.module('phonecatApp', [
  'ngRoute',
  'phonecatAnimations',
  'ui.router',
  'phonecatControllers',
  'phonecatFilters',
  'phonecatServices',
  'ui.utils',
  'angularCircularNavigation',
  'timer'      
]);

phonecatApp.config(['$stateProvider',
  function ($stateProvider, $urlRouterProvider) {    
      var home = {
          name: 'home',
          url: '',
          views: {
              '': {
                  templateUrl: 'partials/home.html',
                  controller: 'HomeCtrl'
              }
          }
      };  

      var learn = {
          name: 'learn',
          url: '/learn',
          views: {
              '': {
                  templateUrl: 'partials/learn.html',
                  controller: 'learnCtrl'
              }
          }
      };    

      var articles = {
          name: 'articles', 
          url: '/articles',
          views: {
              '': {
                  templateUrl: 'partials/articles.html',
                  controller: 'articlesCtrl'
              }
          }
      }; 

      $stateProvider.state(articles);
      $stateProvider.state(learn);
      $stateProvider.state(home);   
  } ]);

谢谢!

2 个答案:

答案 0 :(得分:1)

根据我的经验,导致控制器双重调用的最常见问题是:

您从$stateProvider状态进行控制器调用,同时从HTML调用控制器。

例如考虑:

$stateProvider 
        .state('sidemenu.groups', {
            url: "/groups",
            views: {
                'mainContent': {
                    templateUrl: 'partials/groups/groups.html',
                    controller: 'GroupsCtrl' // <-- 1st call
                }
            }
        })

并在HTML中:

<div ng-controller="GroupsCtrl"></div> <!-- 2nd call -->

删除ng-controller


希望它能帮到你

答案 1 :(得分:0)

决定使用$ routeProvider代替问题解决..