如何创建单独的AngularJS控制器文件?

2022-08-29 23:56:10

我所有的AngularJS控制器都在一个文件中,控制器.js。此文件的结构如下:

angular.module('myApp.controllers', [])
  .controller('Ctrl1', ['$scope', '$http', function($scope, $http) {    
  }])
  .controller('Ctrl2', ['$scope', '$http', function($scope, $http) }
  }])

我想做的是将Ctrl1和Ctrl2放入单独的文件中。然后,我会将这两个文件都包含在我的索引中.html,但是应该如何构建呢?我尝试做这样的事情,但它在Web浏览器控制台中抛出一个错误,说它找不到我的控制器。任何提示?

我搜索了StackOverflow并发现了类似的问题 - 但是,这种语法在Angular之上使用了不同的框架(CoffeeScript),所以我无法遵循。


AngularJS:如何在多个文件中创建控制器


答案 1

文件一:

angular.module('myApp.controllers', []);

文件二:

angular.module('myApp.controllers').controller('Ctrl1', ['$scope', '$http', function($scope, $http){

}]);

文件三:

angular.module('myApp.controllers').controller('Ctrl2', ['$scope', '$http', function($scope, $http){

}]);

按该顺序包含。我建议使用3个文件,因此模块声明是独立的。


至于文件夹结构,关于这个主题有很多很多很多的意见,但这两个都相当不错。

https://github.com/angular/angular-seed

http://briantford.com/blog/huuuuuge-angular-apps.html


答案 2

使用 angular.module API 和末尾的数组将告诉 angular 创建一个新模块:

我的应用.js

// It is like saying "create a new module"
angular.module('myApp.controllers', []); // Notice the empty array at the end here

在没有数组的情况下使用它实际上是一个 getter 函数。因此,要分离控制器,您可以执行以下操作:

Ctrl1.js

// It is just like saying "get this module and create a controller"
angular.module('myApp.controllers').controller('Ctrlr1', ['$scope', '$http', function($scope, $http) {}]);

Ctrl2.js

angular.module('myApp.controllers').controller('Ctrlr2', ['$scope', '$http', function($scope, $http) {}]);

在你的javascript导入过程中,只需确保myApp.js在AngularJS之后,但在任何控制器/服务/等之前...否则,Angular 将无法初始化您的控制器。