grid のような再利用可能なディレクティブを作成しようとしています。コントローラーでデータとアクション (編集、削除など) を定義したいと考えています。
app.controller('MainCtrl', function($scope) {
$scope.data = [
{id: 1, name: 'aaa'},
{id: 2, name: 'bbb'},
{id: 3, name: 'ccc'},
];
$scope.actions = [
{label:'edit', href:'#edit/{{row.id}}'},
{label:'delete', ngClick:'doAction({name:\'delete\', id:row.id})'}
];
$scope.doAction = function (name, id) {
$scope[name](id);
}
$scope.delete = function (row) {
console.log('deleted' + row.id);
}
});
問題は、 のディレクティブの一部を事前レンダリングする方法ですng-repeat
。
app.directive('list', function () {
return {
scope: {
data: '=',
actions: '=',
doAction: '&'
},
template:
'<li ng-repeat="row in data">{{row.name}} ' +
'<span ng-repeat="action in actions">' +
'<a href="{{action.href}}" ng-click="{{action.ngClick}}">' +
'{{action.label}}' +
'</a> ' +
'</span>' +
'</li> '
}
});
今はアクションリンクです<a href="#edit/{{row.id}}">
が、これが必要<a href="#edit/1>
です。また、削除の場合、ng-click は機能しません。コンパイルで遊んでみましたが、できませんでした。手伝って頂けますか?アクションがリストのサブディレクティブである可能性がありますが、問題は同じです。
プランカーのライブ テンプレートは次のとおりです: http://plnkr.co/edit/O7hXXgQb0Num1xZs5Xrt?p=preview
href:'#edit'
注:ctrlでアクション定義を変更できることはわかっています<a href="{{action.href}}/{{row.id}}">
が、これはあまり良い解決策ではありません。これは、このディレクティブの他の使用法では$scope.data
、アクションに渡すことができる他のパラメーターになる可能性があるためです。{{row.id}}
更新された例: 削除用の ng-click を追加