在AngularJS中为同一个模板处理多个控制器
Handling multiple controllers for same template in AngularJS?
我有一个需求,其中单个页面包含大量数据。所有这些数据虽然不同,但只需要在一个页面上显示(垂直滚动)。
我在我的页面上做了各种可折叠div,它们是使用ng-if
来控制的,以避免太多的DOM。
最初对于原型,我在一个控制器中为所有这些div设置了JS逻辑。但是,现在我采用了一种不同的方法,其中我想要一个用于页面的控制器和用于可折叠div的各种子控制器。
我在页面控制器中为每个div保留了一个对象,并在我的主模块(app.js)上制作了几个其他控制器。我希望他们每个人都是pageCtrl
的孩子,因此我应该访问'pageCtrl '中的每个div的数据。
然而,这不起作用。虽然在控制台没有错误,但没有div可见。
我的结构是:
<body ng-app ="mainModule">
<div ng-controller ="pageCtrl">
<div ng-controller = "collapse1Ctrl" ng-include="collapse1.tpl" ng-if="collapse1reqd">
<div ng-controller = "collapse2Ctrl" ng-include="collapse2.tpl" ng-if="collapse2reqd">
<div ng-controller = "collapse3Ctrl" ng-include="collapse3.tpl" ng-if="collapse3reqd">
<div ng-controller = "collapse4Ctrl" ng-include="collapse4.tpl" ng-if="collapse4reqd">
<div ng-controller = "collapse5Ctrl" ng-include="collapse5.tpl" ng-if="collapse5reqd">
</div>
JS像:
angular.module("mainModule", []);
angular.module("mainModule").controller("pageCtrl", pageCtrlFn);
angular.module("mainModule").controller("collaspse1Ctrl", collaspse1CtrlFn);
angular.module("mainModule").controller("collaspse2Ctrl", collaspse2CtrlFn);
angular.module("mainModule").controller("collaspse3Ctrl", collaspse3CtrlFn);
angular.module("mainModule").controller("collaspse4Ctrl", collaspse4CtrlFn);
angular.module("mainModule").controller("collaspse5Ctrl", collaspse5CtrlFn);
请放心,所有模板和条件都在正确的位置。
由于我的代码太大,我目前避免发布它。也许我很快就会发布一个类似的小提琴。
但是目前我想知道有这样一个结构是否有任何问题??
根据OP的问题和面临的问题,这里有一个关于嵌套控制器如何工作以及作用域如何行为的示例演示。
HTML看起来像
<body ng-app="scopeInheritance">
<div class="spicy">
<div ng-controller="MainController">
<p>Good {{timeOfDay}}, {{name}}!</p>
<p>{{display.showName}} - {{age}} --> New Age - {{display.age}}</p>
<input type="text" ng-model="name">
<button ng-click="resetTime()">CHANGE</button>
<div ng-controller="ChildController">
<p>Good {{timeOfDay}}, {{name}}!</p>
<button ng-click="setTime()">SET</button>
<input type="text" ng-model="display.showName"> Age - {{age}}
<input type="text" ng-model="age">
<button ng-click="setAge()">Change Age</button>
<div ng-controller="GrandChildController">
<p>Good {{timeOfDay}}, {{name}}!</p>
</div>
</div>
</div>
</div>
JS如下图
(function(angular) {
'use strict';
var myApp = angular.module('scopeInheritance', []);
myApp.controller('MainController', ['$scope', function($scope) {
$scope.timeOfDay = 'morning';
$scope.files ='';
$scope.name = 'Nikki';
$scope.display={};
$scope.display.showName ='Vikram';
$scope.age ='20';
// $scope.display.age ='20';
$scope.resetTime = function(){
$scope.timeOfDay = 'chaged day';
};
}]);
myApp.controller('ChildController', ['$scope', function($scope) {
$scope.name = 'Mattie';
$scope.$parent.timeOfDay ='';
$scope.setTime = function(){
$scope.timeOfDay = 'new day';
};
$scope.setAge = function(){
$scope.display.age ='25';
};
}]);
myApp.controller('GrandChildController', ['$scope', function($scope) {
$scope.timeOfDay = 'evening';
$scope.name = 'Gingerbread Baby';
}]);
})(window.angular);
这个例子是对Angular Js的org嵌套控制器文档的扩展。
最好将所有的模板和控制器包装成组件,并将它们隐藏在外部控制器
<component1 ng-if="req1"></component1>
<component2 ng-if="req2"></component2>
<component3 ng-if="req3"></component3>
相关文章:
- 使用按钮处理多个控制器
- 如何处理对具有 PHP 的控制器的 XMLhttp 请求
- 如何从控制器创建进度条来处理MVC3中的长流程
- 处理角控制器中异步更新的正确方法
- Rails控制器操作可以同时处理html和javascript请求吗
- 如何在javascript中处理html数组元素,并使用ajax将它们传递给控制器
- 如何从视图中触发事件(自定义事件)并在 Ext JS 的控制器中处理它们
- 如何使用 AngularJS 处理文档单击并通知其他控制器
- 您如何处理指令和控制器中的模板 ng-click
- EXTJS,无法将事件处理程序绑定到控制器
- 是视图中的事件处理程序或 MVC 应用程序中的控制器
- AngularJS应用程序为多个控制器加载和处理一次JSON数据
- 轨道:轨道中的 POST 422(不可处理的实体)?由于路由或控制器
- 如何将函数处理程序从控制器传递到 AngularJs 中的指令隔离范围
- 处理开机自检后从 Angular 控制器到指令的成功/错误 DOM 操作
- 处理控制器和视图之间的事件
- 如何正确处理控制器提交方法中的远程属性验证
- Angular JS处理控制器事件
- ASP.Net MVC处理控制器事件的最佳实践,该事件不返回视图,但在完成时弹出一个窗口
- angular.js-处理控制器内部点击的最简单方法