我有一个与一个控制器关联的指令,我的控制器中的函数定义为
MyFormController.prototype.addNewRow = function addNewRow() {
//Adding row code
};
我想从另一个控制器调用这个方法,可能的方法吗?
我已经使用该服务并将代码移动到跨控制器共享的服务,但服务代码执行DOM操作,然后我想下一个问题是我们可以在服务测试中使用$ compile情况下
答案 0 :(得分:2)
服务或工厂用于在控制器之间共享数据。因此最好在服务和工厂中定义功能。
<强>演示:强>
(function() {
angular.module('app', [])
.service('svc', function() {
var svc = {};
svc.method = function() {
alert(1);
}
return svc;
})
.controller('ctrl', [
'$scope', 'svc', function($scope, svc) {
svc.method();
}
]);
})();
答案 1 :(得分:0)
你不应该!
这违背了模块化的整个目的。 如果可能,尝试使该功能通用并创建服务/工厂。现在你需要的地方,使用在服务中定义的相同的通用功能,并做他们的东西。
否则,您还可以查看事件以进行相应的更改。 看看这篇博文: http://ilikekillnerds.com/2014/11/angularjs-call-controller-another-controller/
最后但最糟糕的解决方案是(避免使用它,这实际上是一种令人讨厌的方式)捕获指令中的元素并获取其范围并从中获取函数。 例如,
var otherControllerFunc = $(".inside-directive").scope().yourfunc;