将控制器和指令的交互方式捆绑在一起
tying together the ways controllers and directives interact
在过去的几天里,我读了很多关于指令和控制器之间连接的文章。我已经做了一些观察,但我有麻烦把它们放在一起,可以使用一点指导。
我见过控制器和指令混在一起的方式有四到五种。
给定:
angular.module('myApp', []);
myApp.controller('ctrlName', function($scope){
$scope.someVar = "some value";
});
我见过指令和控制器以以下方式相互作用和连接:
1)用圆点连在一起
myApp.controller('ctrlName', function($scope){
$scope.someVar = "some value within controller";
})
.directive('drtvName', function(){
return {
scope: {
someVar: 'some value within directive'
}
}
});
2)作为指令方法指定的控制器。如果它是点链(如#1)的一部分,它如何与上面的控制器交互
myApp.directive('drtvName', function(){
scope: {/*not sure what it means when this is simply an empty object*/},
controller: function(scope){
/*is this completely separate from myApp.controller('name', function(){});*/
}
});
3)控制器被指定为应用程序中单独控制器的名称。我真的不确定两个scope
将如何混合
myApp.directive('drtvName', function(){
controller: 'ctrlName',
scope: {
connectedToCtrlScopeOrJustHTMLView: 'dunno'
}
});
这里有一个新的。该控制器需要作为父控制器。当我修补这个的时候,我甚至不能使用链接方法让它工作,所以我不确定什么时候它会有用
myApp.directive(drtvName', function(){
scope: {},
require: '^myParentController' //not sure what scope will be one line about with this option
});
您列出的交互在许多方面各不相同,但我将在这里总结它们:
-
这演示了创建一个模块并向该模块添加指令和控制器。在这个实例中,它们不是相互交互,而是与模块本身交互。
.directive
和.controller
的返回值是模块,所以这就是链接的来源。 -
在这种情况下,你是在定义一个指令的控制器函数。回答你的问题,是的,这是一个完全不同的控制器与你的方式,但是....
-
要进入下一个点,你可以像在#1中那样在模块上定义一个控制器,然后在你的指令中使用它:
在你的模块:
module.controller('myController', function () {...});
在你的指令中:
controller : 'myController'
这使得像对指令进行单元测试这样的事情变得超级容易,同时也实现了关注点的可靠分离。
- 当一个指令需要与另一个指令通信时。指令的控制器函数基本上就是它的API。因此,如果你在指令中需要另一个指令,那么所需要指令的控制器函数就会作为第四个参数注入到你的link函数中。
因此,在您的示例中,myParentController
的控制器函数将作为链接函数的第四个参数注入,因此您可以这样定义它:
link : function (scope, element, attrs, myParentController)
然后,在执行要求的指令中,你可以访问在你所要求的控制器的控制器函数上定义的任何函数。
希望对你有帮助。
相关文章:
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- angularjs路线过渡如何以交互方式设置动画
- 如何将具有相同功能的两个select html标签的两个JS组合在一起
- 将3个函数合并在一起
- 使用javascript将两个输入的日期添加在一起
- 避免将lib依赖项与webpack+handlebas加载程序捆绑在一起
- 为什么我在以编程方式打开窗口时遇到问题
- PHP、Javascript和SQL代码混杂在一起
- 有没有办法把它们串在一起,这样它们基本上可以同时工作
- PHP:同时循环元素粘在一起
- 把两个数字加在一起,得到5+10=510,而不是15
- 我怎样把这些剧本写在一起
- 为什么某些Javascript属性没有在调试器中以交互方式显示
- 如何在网页上以交互方式切换 CSS 工作表以进行测试/学习
- 都是'sync'event和Backbone.sync以某种方式连接在一起——两者之间有什么区别
- 如何将两个段落连接在一起以内联方式显示,而不会使文本移动
- 有没有一种优雅的方式将承诺联系在一起
- 最好的使用方式为循环和aysnc水落在一起
- 将控制器和指令的交互方式捆绑在一起
- 什么's使用相同的事件处理程序将多个元素分别与不同的事件绑定在一起的优雅方式