我尝试通过嵌套指令循环一个函数。从console.info
myCtrl
开始,我希望字符串为"this should be logged"
。
angular.module('myApp')
.controller('myCtrl', function ($scope) {
$scope.aFunction = function(input) {
console.info(input.message);
}
})
.directive('levelOneDirective', function () {
return {
templateUrl: '<level-two-directive aFunction="aFunction(object)"></level-two-directive>',
restrict: 'EA',
scope: {
aFunction:"&"
},
link: function (scope, element, attrs) {
}
};
})
.directive('levelTwoDirective', function () {
return {
templateUrl: '<div ng-click="aFunction({message: 'this should be logged'})"></div>',
restrict: 'EA',
scope: {
aFunction:"&"
},
link: function (scope, element, attrs) {
}
};
});
在我的index.html
我有类似的东西:
<div ng-controller="myCtrl">
<level-one-directive aFunction="aFunction(object)"></level-one-directive>
</div>
但是控制台说undefined
。
如何通过嵌套指令连接函数?
答案 0 :(得分:1)
您的代码中有多处错误,但我认为这是因为您尝试将其调整为问题(例如aFunction
作为属性而不是a-function
和templateUrl
而不是{{ 1}})。
您可以在指令中使用双向绑定(template
)(两者都有):
=
并传递没有对象的函数引用:
scope: {
aFunction:"="
},
在第二个指令中,HTML有:
<level-one-directive a-function="aFunction"></level-one-directive>
然后在你的第二个指令的链接功能中你可以做到:
<div ng-click="invokeFunction()"></div>
上面的工作,我发现它比scope.invokeFunction = function () {
scope.aFunction({message: 'this should be logged'});
}
绑定更方便,正如你所看到的那样,并不是很容易使用,坦率地说我没有弄清楚它是如何解决的(并且如果可能的话)通过它传递参数。
我见过this question,但它直接绑定在链接功能上,而你希望它带有&
,所以它可能不适合你。但也许你会在那里找到你的解决方案。