Sam*_*Sam 54 angularjs angularjs-scope
我见过人们从他们的代码中的任何地方这样做:
$rootScope.$broadcast('someEvent', someParameter);
Run Code Online (Sandbox Code Playgroud)
然后在一些控制器中:
$rootScope.$on('someEvent', function(event, e){ /* implementation here */ });
Run Code Online (Sandbox Code Playgroud)
现在,我想从一个指令中扩展一个事件.在rootScope级别播放它是一种好习惯吗?我想在控制器中处理这个事件.我可以使用$ scope,还是我还要听$ rootScope?
Mar*_*cok 79
在我的例子中,我只想将一个事件从指令广播到视图的控制器,我在其中使用该指令.那么使用广播还有意义吗?
我会让指令在控制器上调用一个方法,该方法在使用该指令的HTML中指定:
对于使用隔离范围的指令:
<div my-dir ctrl-fn="someCtrlFn(arg1)"></div>
app.directive('myDir', function() {
return {
scope: { ctrlFn: '&' },
link: function(scope, element, attrs) {
...
scope.ctrlFn({arg1: someValue});
}
Run Code Online (Sandbox Code Playgroud)
对于不使用隔离范围的指令:
<div my-dir ctrl-fn="someCtrlFn(arg1)"></div>
app.directive('myDir', function($parse) {
return {
scope: true, // or no new scope -- i.e., remove this line
link: function(scope, element, attrs) {
var invoker = $parse(attrs.ctrlFn);
...
invoker(scope, {arg1: someValue} );
}
Run Code Online (Sandbox Code Playgroud)
joa*_*mbl 13
通常不使用$ rootScope作为全局,除非你真的知道自己在做什么,否则不应该污染它.我建议您阅读本文关于服务,指令和控制器之间的通信.
| 归档时间: |
|
| 查看次数: |
62519 次 |
| 最近记录: |