【问题标题】:Call Angular directive controller method from another controller从另一个控制器调用 Angular 指令控制器方法
【发布时间】:2015-04-25 08:29:39
【问题描述】:

我有一个与一个控制器相关联的指令,并且我的控制器中的功能定义为

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

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

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

【问题讨论】:

标签: angularjs controller directive


【解决方案1】:

服务或工厂用于在控制器之间共享数据。因此最好在服务和工厂中定义功能。

演示:

(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();
            }
        ]);
})();

【讨论】:

  • 我已经使用该服务并将代码移动到该服务中,该服务在控制器之间共享,但是服务代码执行 DOM 操作,然后我想下一个问题是我们可以使用 $在服务测试用例中编译
  • 对不起,我不知道角度测试:(
【解决方案2】:

你不应该!!!

这违背了模块化的全部目的。 如果可能,请尝试使功能通用并创建服务/工厂。现在,您需要的两个地方都使用 service 中定义的相同通用函数并做他们的事情。

否则,您还可以查看事件以进行相应更改。 看看这篇博文: http://ilikekillnerds.com/2014/11/angularjs-call-controller-another-controller/

最后但最糟糕的解决方案是(避免使用 this,这实际上是一种可怕的方式)是在指令中捕获元素并获取其范围并从中获取函数。 例如,

var otherControllerFunc = $(".inside-directive").scope().yourfunc;

【讨论】:

  • 我已经使用该服务并将代码移动到该服务中,该服务在控制器之间共享,但是服务代码执行 DOM 操作,然后我想下一个问题是我们可以使用 $在服务测试用例中编译
猜你喜欢
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 2015-09-07
相关资源
最近更新 更多