使用 Angular.Module 的 AngularJS 指令定义

angularjs directive definition using angular.module

本文关键字:指令 定义 AngularJS Angular Module 使用      更新时间:2023-09-26

请谁能解释为什么以下抛出"参数'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('app').directive('typeahead', ...)

如果我将指令定义为控制器定义之后的级联,它也可以很好地工作,即

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 {

提前感谢!

您遇到了 Angular 的创建与检索问题:

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

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

由于您再次调用angular.module('app',[]),模块app已重新初始化。这就是为什么MainCtrl现在没有定义。