[英]Passing a bound variable to ng-click for dynamic click handler
我有以下dom。
<td grid-item ng-repeat='col in columnDefs' ng-click="actions[col.field]"></td>
这包装在指令中:
angular.module('myApp').
directive('gridItem', function () {
return {
restrict: 'A',
templateUrl: 'views/grid_item.html',
link: function postLink(scope, element, attrs) {
if (scope.$eval(element.attr('ng-click'))) {
element.addClass('clickable');
}
}
};
});
为了清楚起见:操作是以下格式的对象:
{some_column: '', some_other_column: 'myFunction(arguments)', some_third_column: 'myOtherFunction(arguments)'}
和col.field
将是some_column
, some_other_column
等,具体取决于特定的迭代
这样可以很好地绑定,并将clickable类添加到ng-click非空白的元素中。
但是,永远不会调用控制器上的方法。 为什么是这样? 以及如何基于字符串表示形式动态绑定到函数?
activity [col.field]的字符串表示形式(在这种情况下)是: fetch('activity', $parent.$index)
。
控制器肯定是在范围内,因为它是通过controller:
在带有(不确定是否相关)隔离范围的父指令上定义的。
注意:我已经找到一种破解它的方法,
element.on('click', function(){
scope.$eval(scope.$eval(attrs.ngClick));
});
显然,这不是一个理想的解决方案...
我认为您需要将actions[col.field]
更改为actions(col.field)
。 这是我对您的指令的测试代码:
<div lang="en" ng-app="App" ng-controller="MainCtrl">
<table>
<td grid-item ng-repeat='col in columnDefs' ng-click="actions(col.field)"></td>
</table>
</div>
app.directive('gridItem', function ($compile) {
return {
restrict: 'A',
template: '<div>blah</div>',
link: function postLink(scope, element, attrs) {
if (scope.$eval(element.attr('ng-click'))) {
element.addClass('clickable');
}
}
};
});
function MainCtrl($scope) {
$scope.columnDefs = ['a', 'b', 'c'];
$scope.actions = function (field) {
console.log(field);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.