AngularJS - 指令无法识别控制器

时间:2014-06-30 17:43:49

标签: angularjs

如果我在同一个文件中有指令和控制器:

var app =  angular.module('app.navigation', []);

app.controller('NavItemCtrl', [ ....])

app.directive('navItem', [
        'ribbon', '$window', function (ribbon, $window) {
            return {
                require: ['^navigation', '^?navGroup'],
                restrict: 'AE',
                controller: 'NavItemCtrl',
      ...
      }])

一切都很好,但如果我将控制器代码移动到另一个文件,因为当前文件变得过于混乱,使用相同的模块,并在我的索引页面中引用新的控制器文件,该指令会尖叫

          p0=NavItemCtrl&p1=not aNaNunction got undefined

我的索引页面是这样的:

 <html>
 <body>
  ....

 <script app.js ...>
 <script new controller file path .... >
 <script original directive file path .... >
  ....
 </body>
 </html>

我在这里缺少什么?

[解决方案] Delta正确,我想通了:

为了保持良好的住房,我认为有一个JS文件(在主app.js中作为依赖项列出)可能是明智的,它会实例化您将使用的所有模块,假设您的项目变大,然后重复使用实例化没有任何依赖关系。

例如:

(1)主要应用程序:

angular.module('MainApp', ['ngRoute', 'ngAnimate', 'app.SubApp1', 'app.SubApp2', 'app.SubApp3' ...]

(2)然后作为存储库,如果你愿意,创建一个新的js文件,比如repositoryApp.js,实例化这些子应用程序,确保在使用这些子应用程序模块的所有其他文件之前引用该文件:

angular.module('app.SubApp1', [xxx]);
angular.module('app.SubApp2', [xxx]);
angular.module('app.SubApp3', [xxx]);

(3)然后,在创建一系列指令,控制器或与特定子应用程序有关的任何内容时,只需将相应文件中的子应用程序引用为:

angular.module('app.SubApp1').controller('foo') .....
angular.module('app.SubApp1').directive('bar') .....

没有依赖括号,因为这就是我的错误。

1 个答案:

答案 0 :(得分:2)

你的指令中的

你得到的是这样的应用程序

var app =  angular.module('app.navigation');

如果你把括号放在它后面就像你的第一个例子一样,你将只是替换你现有的而不是得到它。

这是一个新模块

var app =  angular.module('app.navigation', []);

这会获得现有模块。

var app =  angular.module('app.navigation');

请注意在第二个示例中排除了括号。