将函数从控制器范围传递到指令隔离范围

时间:2015-10-28 17:04:27

标签: angularjs angularjs-directive isolate-scope

我正在使用AngularJS并尝试将控制器范围内的函数传递给指令的隔离范围。

我知道我以前做过这个,但这次有问题。

该函数接受两个输入,并将它们记录到控制台。

但是,当我将其作为

传递给我的指令时
<div my-dir my-function="functionName"></div>

<div my-dir my-function="functionName()"></div>

尝试从我的指令控制器调用它,我实际上得到一个不带参数的函数并返回我的函数。

即代替调用

ctrl.functionName(a,b)

我必须致电

ctrl.functionName()(a,b)

非常感谢任何帮助。

我见过这样的语法参考:

 <div my-dir my-function="functionName({})"></div>

2 个答案:

答案 0 :(得分:2)

html:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.Controls.Add(Form2.Panel1)
    Form2.Panel1.Hide()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Me.Panel1.Hide()
    Form2.Panel1.Show()
    Form2.Panel1.Location = Me.Panel1.Location
    Form2.Panel1.Size = Me.Panel1.Size 'to be the same size
End Sub

指令:

<div my-dir my-function="functionName()"></div>

答案 1 :(得分:0)

使用范围隔离尝试以下代码:

angular.module("Demo", [])  
  .controller("ChildCtrl", function($rootScope, $scope) {
    $scope.testFunc = function (a, b) {
        return a + b;
    }
 })
.directive("isoElement", function() {
  return {
    restrict: "E",
    scope: {
        testFunc: '&'
    },
    link: function(scope) {
      console.log(scope.testFunc()(1, 2));
    }
  };
}); 

指令用法将是:

<div ng-app="Demo" ng-controller="ChildCtrl">
    <iso-element test-func="testFunc"></iso-element>
</div>

您需要执行scope.testFunc()(..),因为scope.testFunc()将返回函数本身。 IMO比从另一方面解决问题更容易理解。