我都在一个文件中我AngularJS控制器,controllers.js。 该文件的结构如下:
angular.module('myApp.controllers', [])
.controller('Ctrl1', ['$scope', '$http', function($scope, $http) {
}])
.controller('Ctrl2', ['$scope', '$http', function($scope, $http) }
}])
我希望做的就是把CTRL 1和CTRL 2到单独的文件。 然后我会包括我的index.html这两个文件,但是应该如何是结构? 我试图做一些这样的事情,它在Web浏览器控制台抛出一个错误说,它不能找到我的控制器。 任何提示?
我搜索的StackOverflow,发现这个类似的问题 - 然而,这种语法使用上的角顶不同的框架(CoffeeScript的),所以我一直没能跟随。
AngularJS:如何创建多个文件中的控制器
Answer 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
Answer 2:
使用angular.module API,并在最后一个阵列将告诉角来创建一个新的模块:
myApp.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之后,但在任何控制器/服务/等等,否则将角不能初始化控制器。
Answer 3:
虽然这两个答案都是技术上是正确的,我想介绍一个不同的语法选择了这个答案。 恕我直言,这使得它更易于阅读发生了什么事情与注入等区分
文件中的一个
// Create the module that deals with controllers
angular.module('myApp.controllers', []);
文件中的两个
// Here we get the module we created in file one
angular.module('myApp.controllers')
// We are adding a function called Ctrl1
// to the module we got in the line above
.controller('Ctrl1', Ctrl1);
// Inject my dependencies
Ctrl1.$inject = ['$scope', '$http'];
// Now create our controller function with all necessary logic
function Ctrl1($scope, $http) {
// Logic here
}
文件中的三个
// Here we get the module we created in file one
angular.module('myApp.controllers')
// We are adding a function called Ctrl2
// to the module we got in the line above
.controller('Ctrl2', Ctrl2);
// Inject my dependencies
Ctrl2.$inject = ['$scope', '$http'];
// Now create our controller function with all necessary logic
function Ctrl2($scope, $http) {
// Logic here
}
Answer 4:
这个怎么样的解决方案? 模块和控制器中的文件 (在页面的结尾)它与多个控制器,指令等:
app.js
var app = angular.module("myApp", ['deps']);
myCtrl.js
app.controller("myCtrl", function($scope) { ..});
HTML
<script src="app.js"></script>
<script src="myCtrl.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
谷歌也有一个对角应用程序结构的最佳实践建议我真的情境喜欢组。 并不是所有的HTML一个文件夹中,但例如用于登录的所有文件(HTML,CSS,app.js,controller.js等)。 所以,如果我在模块上的工作,所有的指令都更容易找到。
Answer 5:
为简单起见,这里是一个不依赖于全局变量的ES2015样本
// controllers/example-controller.js
export const ExampleControllerName = "ExampleController"
export const ExampleController = ($scope) => {
// something...
}
// controllers/another-controller.js
export const AnotherControllerName = "AnotherController"
export const AnotherController = ($scope) => {
// functionality...
}
// app.js
import angular from "angular";
import {
ExampleControllerName,
ExampleController
} = "./controllers/example-controller";
import {
AnotherControllerName,
AnotherController
} = "./controllers/another-controller";
angular.module("myApp", [/* deps */])
.controller(ExampleControllerName, ExampleController)
.controller(AnotherControllerName, AnotherController)
Answer 6:
不是那么的优雅,但在实现解决方案的十分简单 - 使用全局变量。
在“第一”的文件:
window.myApp = angular.module("myApp", [])
....
在“第二”,“第三”等:
myApp.controller('MyController', function($scope) {
....
});
文章来源: How to create separate AngularJS controller files?