私は次の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
これは正常にバインドされ、クリック可能なクラスが ng-click が空白でない要素に追加されます。
ただし、コントローラーのメソッドは呼び出されません。どうしてこれなの?また、文字列表現に基づいて関数に動的にバインドするにはどうすればよいですか?
activity[col.field] (この場合) の文字列表現は次のとおりfetch('activity', $parent.$index)
です。
controller:
コントローラーは、親ディレクティブのキーを介して定義されているため、確実にスコープ内にあります(これが関連しているかどうかは不明です)分離スコープ。
注: ハッキングして機能させる方法を見つけました。
element.on('click', function(){
scope.$eval(scope.$eval(attrs.ngClick));
});
明らかに、それは理想的とは言えない解決策です...