Я использую 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>
HTML:
<div my-dir my-function="functionName()"></div>
директива:
angular.directive('myDir', function() {
return {
scope: {
callback: '&myFunction'
},
controller: function($scope) {
$scope.callback({param1: val1, param2: val2});
};
});
Попробуйте использовать следующий код с изоляцией:
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() вернет сама функция. ИМО это более понятно, чем приближаться к проблеме с другой стороны.