【问题标题】:angular - controller excute more than 1 time角度 - 控制器执行超过 1 次
【发布时间】:2014-10-30 01:41:56
【问题描述】:

我知道以前有人问过,但找不到适合我的解决方案。 我让每个控制器启动 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);   
  } ]);

谢谢!

【问题讨论】:

  • 你确定它的控制器有问题吗?将日志添加到控制器中以查看它打印 3 次。
  • 是的,每个控制器执行3次

标签: javascript angularjs


【解决方案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


希望对你有帮助

【讨论】:

  • 谢谢.. 但这不是问题。唯一带有“contoller”字样的 html 文件位于 index.html -
【解决方案2】:

决定改用$routeProvider,问题解决了..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    相关资源
    最近更新 更多