角度ng控制器与在指令中构建的控制器
Angular ngController vs Controller constructed within Directive
我想知道这两种创建控制器的方法的用例是什么:
使用 ngController:
myApp.controller('myController', ['$scope', function ( $scope ) {
}]);
在具有控制器属性的指令中构造控制器:
myApp.directive ( 'myDirective', [ '$window', function( $window ) {
return {
restrict: 'A',
controller: [ '$scope', function( $scope ) {
}],
link: function( scope, element, attrs ) {
}
};
}]);
如果它们都在同一元素上调用,您有什么理由不在指令中构造控制器?
这仅仅是控制器使用范围/复杂性的问题吗?
使用指令控制器的原因浓缩在一句话中:
创建可重用组件
指令控制器应包含可重用的组件的逻辑。将指令控制器与隔离范围一起使用是创建可重用组件的方法。
以分页器为例:分页器需要一些逻辑来通知其他组件(例如网格(当前所选页面已更改,以便网格可以相应地更新。这些逻辑可以写在指令控制器中以供重用。与隔离作用域一起使用时,此作用域与应用程序控制器的作用域不紧密,并且可以轻松地将 pageSize 配置为绑定到应用程序控制器作用域的任何属性。
普通控制器(使用ng-controller或routes创建的控制器(和指令控制器之间存在细微的区别。
-
指令控制器允许注入
$element
。请注意,虽然目前您也可以将$element
注入到普通控制器中,但这样做的做法很糟糕。
指令 控制器的唯一用途是指令到指令的通信。一个非常好的用例显示在AngularJS的主页上,用于选项卡组件。
控制器允许指令具有功能。由于这些控制器实例在其他指令中可能是"必需的",因此其他指令可以使用控制器实例在此指令上进行通信/操作。
将控制器与指令一起使用的唯一原因是,如果要执行某种指令到指令的通信。对于其他任何事情,您可能应该坚持在链接函数中编写所有scope
逻辑。
每次调用指令时调用指令控制器我的意思是
<directive id="1"></directive>
<directive id="2"></directive>
<directive id="3"></directive>
指令控制器调用 3 次,每次都有自己的作用域。
和ng控制器也有相同的性质。但是ngcontroller也可以在其他指令/html页面中重用。
你也可以把 ngController 放在指令中(我们假设 appCtrl 在任何控制器.js文件中定义(
.directive('directive',function(){
return{
scope:{},
template:"<div>{{hello}}</div>",
controller:"appCtrl"
}
})
添加有关在指令控制器中访问方法和值的一些详细信息:
父指令
myApp.directive ( 'parent', [ function() {
return {
restrict: 'A',
scope: {},
controller: [ '$scope', function( $scope ) {
//this.myVar = ''; //accessible in child directives
//$scope.myVar = ''; //accessible in template
$scope.myVar = this.myVar = '';
}],
template: '<div data-child> {{myVar}} </div>',
link: function( scope, element, attrs ) {
console.log( scope.myVar );
}
};
}]);
子指令
myApp.directive ( 'child', [ function() {
return {
restrict: 'A',
require: '^parent',
link: function( scope, element, attrs, ctrl ) {
console.log( ctrl.myVar );
}
};
}]);
- 在指令控制器中使用$attrs时出现问题
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 我应该如何从xml文件构建一个javascript页面
- 从控制器返回后Ajax启动事件激发
- 如何在DOM元素上按类型构建此函数
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 如何在单击复选框后调用控制器方法
- 在控制器和数据对象之间同步数据
- 将Javascript数组发送到控制器ASP.NET MVC
- Sencha Touch构建-排除文件
- RubyonRails——构建交互式接口应该朝哪个方向发展
- 构建现实世界的AngularJS应用程序,我应该如何在html中声明我的控制器.我需要在索引中声明所有.html吗?
- 角度ng控制器与在指令中构建的控制器
- 在 Angular JS 中将 Json 数据从控制器传递到 View 以构建表
- 如何通过多次调用在Angular JS服务或控制器中构建模型数据
- 在由EmberCLI构建的EmberJS中,如何调用不同控制器上的方法
- 视图,控制器,模型和Ajax,对于构建一个需要自动更新的工具有什么建议吗?(ASP.. NET MVC Razor)
- 将js变量传递给控制器并在ci中构建新视图
- 模型视图控制器-Javascript可以构建这种MVC模式或语法糖
- 动态构建JSON变量从HTML5移动发送到Ruby on Rails控制器