从$rootScope-AngularJS中的指令调用函数
Call function from directive in $rootScope - AngularJS
我想做的事情:
我正在尝试在一个可以从$rootScope
调用的指令中创建一个函数。
问题:
它似乎只处理DOM中具有此指令的最后一个项。我猜,每次运行该指令时,rootScope.myFunction
都会被覆盖。
问题:
如何在$rootScope
中创建一个函数,当调用该函数时,该函数将为每个指令运行内部函数,而不仅仅是最后一个指令?
相关代码:
(function() {
angular.module('home')
.directive('closeBar', closeBar);
closeBar.$inject = ['$rootScope', '$window'];
function closeBar(rootScope, window) {
return {
scope: true,
restrict: 'A',
link: function(scope, element, attrs) {
var myFunction = function() {
// do stuff
};
myFunction();
rootScope.myFunction = function() {
myFunction();
};
}
};
}
})();
然后在另一个脚本中,我想调用:
rootScope.myFunction();
注意,我不允许分享我正在处理的项目中的实际代码,所以这是一个更一般的问题,与特定的用例无关
一个简单的解决方案是在rootScope中创建一个特殊的函数,该函数接受函数作为参数,并将其推送到一个数组中,之后您将能够调用该函数,它将调用所有注册的函数。
angular.module('myApp').run(['$rootScope', function($root) {
var functionsToCall = [];
$root.registerDirectiveFunction = function(fn, context) {
context = context || window;
functionsToCall.push({fn: fn, context: context});
}
$root.myFunction = function(args) {
functionsToCall.forEach(function(fnObj) {
fnObj.fn.apply(fnObj.context,args);
});
}
}
在你的指令中:
link: function($scope, $el, $attr) {
function myFunct() {
}
$scope.$root.registerDirectiveFunction(myFunct, $scope);
//call it if you want
$scope.$root.myFunction();
}
这应该涵盖您的场景。
相关文章:
- 如何从 AngularJS 指令调用 Android 方法
- Angularjs指令调用控制器函数
- 从自定义指令调用角度路由
- 如何在angular js中从指令调用控制器函数
- Angularjs将函数从控制器传递到指令(或从指令调用控制器函数)-带参数
- 从指令调用控制器函数(使用从指令传递的参数)
- ng 类指令调用执行两次
- 从子指令调用指令函数不起作用
- 从指令调用角度控制器函数
- AngularJS 从$stateProvider设置的控制器上的指令调用函数
- 如何从带有复选框的 AngularJS 指令调用函数,当它被选中时
- Angular JS:从指令调用父控制器方法
- 角度ng-repeat不更新,当使用jQuery内部指令调用Angular 方法时
- 递归自定义树视图 angularjs 指令调用 ng 单击两次
- 自定义指令调用$scope函数会导致$rootScope:infdig
- ngTagInput在通过指令调用时给出了一个javascript控制台错误
- 从$rootScope-AngularJS中的指令调用函数
- 从指令调用父作用域函数
- 从另一个指令调用指令
- 如何从从指令调用的函数中调用函数