从另一个控制器调用Angular指令控制器方法

时间:2015-04-25 08:29:40

标签: angularjs controller directive

我有一个与一个控制器关联的指令,我的控制器中的函数定义为

   MyFormController.prototype.addNewRow = function addNewRow() {
             //Adding row code
};

我想从另一个控制器调用这个方法,可能的方法吗?

我已经使用该服务并将代码移动到跨控制器共享的服务,但服务代码执行DOM操作,然后我想下一个问题是我们可以在服务测试中使用$ compile情况下

2 个答案:

答案 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;