使用angular.module的angularjs指令定义

时间:2015-02-01 01:58:28

标签: javascript angularjs

任何人都可以解释为什么以下内容会引发" Argument' MainCtrl'不是一个功能,未定义"错误似乎与模块依赖注入与指令(?!)的使用有关。

angular.module('app', [])
  .controller('MainCtrl', [function() {
    var self = this;
    self.name = "will this work";
    self.items = [
      {
        name: "name 1",
        test: "test 1"
      },
      {
        name: "name 2",
        test: "test 2"
      }
    ];
  }]);

angular.module('app',[])
  .directive('typeahead', [function() {
    return {
      templateUrl: 'type-ahead.html',
      restrict: 'AEC',
      scope: {
        items: '=',
        prompt: '@',
        title: '@',
        subtitle: '@',
        model: '=',
        onSelect: '&'
      }, <...more code>

但是当我删除

时,它会完美无缺
  

[]

模块依赖项从指令中删除

  

angular.module(&#39; app&#39;)。指令(&#39; typeahead&#39;,...)

如果我将指令定义为遵循控制器定义的级联,那么它也可以正常工作,即

angular.module('app', [])
      .controller('MainCtrl', [function() {
        var self = this;
        self.name = "will this work";
        self.items = [
          {
            name: "name 1",
            test: "test 1"
          },
          {
            name: "name 2",
            test: "test 2"
          }
        ];
      }])

    .directive('typeahead', [function() {
        return {

提前致谢!

1 个答案:

答案 0 :(得分:2)

你遇到了Angular的Creation versus Retrieval问题:

  

注意使用angular.module('myModule',[])将创建模块myModule并覆盖任何名为myModule的现有模块。使用angular.module('myModule')来检索现有模块。

第一次运行angular.module('app',[])时,Angular会创建一个名为app的模块。下次,您只需要运行angular.module('app'),Angular将尝试加载现有模块app

由于您再次致电angular.module('app',[]),因此模块app已重新初始化。这就是为什么MainCtrl现在未定义的原因。