我正在使用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>
答案 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比从另一方面解决问题更容易理解。