如何在AngularJS的单个页面中添加多个控制器
How to add multiple controller in single page in AngularJS
我是AngularJS的新手,我对这段代码有问题。我想在单个ng-app
中添加多个控制器。但它执行第一个。为什么不是第二个?
<!DOCTYPE html>
<html ng-app="myapp">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/angul /1.4.8/angular.min.js"></script>
</head>
<body>
<div ng-controller="cont1">
<input type="text" ng-model="fullname">
{{fullname}}
</div>
<div ng-controller="cont2">
<input type="text" ng-model="fname">
{{fname}}
</div>
<script>
var app = angular.module("myapp", []);
app.controller('cont1', function ($scope) {
$scope.fullname = "";
});
var new = angular.module('myapp', []);
new.controller('cont2', function ($scope) {
$scope.fname = "";
});
</script>
</body>
</html>
因为当您执行var new= angular.module('myapp',[]);
时,您正在覆盖第一个myapp
模块。
您的代码应该是:
var app = angular.module("myapp", []);
app.controller('cont1', function($scope) {
$scope.fullname = "";
});
app.controller('cont2', function($scope) {
$scope.fname = "";
});
或
var app = angular.module("myapp", []);
app.controller('cont1', function($scope) {
$scope.fullname = "";
});
angular.module("myapp").controller('cont2', function($scope) {
$scope.fname = "";
});
传递给module()
[]
第二个参数会有所不同
为了最好地定义控制器、指令、工厂等... 是
在单独的文件中定义模块名称
app.module.js
angular.module("myapp",[]); // inside [] you define your module dependencies
对于控制器,创建单独的文件(根据您的要求,甚至可以为1个控制器创建1个文件)
一些控制器.js
angular.module("myapp").controller('someCtrl'['$scope', function($scope){
}]);
angular.module("myapp").controller('someOtherCtrl'['$scope', function($scope){
}]);
注意:
可以编写控制器的两种类型
类型 1(不推荐)
.controller('ctrlName', function($scope){
});
类型 2(推荐)
.controller('ctrlName', ['$scope', function($scope){
}]);
原因
因此,正如您在 TYPE2 中看到的那样,我们将控制器依赖项传递到数组中,因此当我们编译程序时,angular 会将名称命名为 eg:a 以$scope 函数() 内部并将其视为$scope。
使用TYPE1,在定义控制器依赖关系时,您需要遵循特定的顺序,否则角度将通过错误,因为在这种方法中,角度只是将第一个依赖关系视为$rootscope,第二个依赖关系视为$scope等等。
例如:
不能像这样将依赖项传递给控制器
.controller('ctrlName', function($http, $scope) {
});
这将引发错误
如果你定义像
.controller('ctrlName', function($scope, $http) {
});
这将正常工作,因为它是 Angular 想要的顺序。
您也可以通过这种方式在单个模块中定义多个控制器:
angular.module("myapp",[]);
.controller('cont1',function($scope){
$scope.fullname="";
});
.controller('cont2',function($scope){
$scope.fname="";
});
定义模块时,不要使用 var
。您可以在此处找到一些 Angular 最佳实践:Angular 风格指南/最佳实践
相关文章:
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 堆叠有角度路由器添加控制器
- 在控制器中添加$location依赖项时,ng-click停止激发
- 将变量动态添加到每个控制器的作用域
- 将范围添加到角度种子默认视图控制器时,测试套件现在失败
- 如何在打字稿的控制器中添加 angularjs 服务
- 将控制器添加到 Angular JS 中的选项卡
- 将控制器的功能添加到角度中的特定视图
- 将音量控制器In添加到从隐藏到块显示的切换中
- 如何在angular.js控制器中添加谷歌地图
- 将角度控制器添加到因果报应覆盖(伊斯坦布尔)代码覆盖预处理器
- Ember添加了对转换调用上下文(路由/控制器)的检查
- 动态添加/注册AngularJS控制器,无需路由
- 如何添加$scope$打开以在没有控制器的情况下查看
- Angularjs 动态添加控制器
- 如何在Typescript中的角度指令类中添加控制器
- 添加控制器与吞咽和角度
- 在extjs中添加控制器时视图不显示
- 在向ngRoute添加控制器时出现意外标识符
- 动态添加控制器到ng include