我嘗試創建類似網格的可重用指令。我想在控制器中定義數據和操作(編輯,刪除...)。如何在ng-repeat的angular指令中預渲染變量?
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不起作用。我試圖玩編譯,但我無法做到這一點。你可以幫我嗎?可能是動作可能是子列表的指令,問題是一樣的。
這裏是plunker現場模板:http://plnkr.co/edit/O7hXXgQb0Num1xZs5Xrt?p=preview
注:我知道我可以修改的動作定義CTRL href:'#edit'
然後<a href="{{action.href}}/{{row.id}}">
但是這不是很好的解決方案,因爲在這個指令的其他用法可能是從其他PARAMS $scope.data
,我可以傳遞到行動,而不是總是{{row.id}}
更新例如:增加了刪除
底部檢查他的說明他的問題。 ;) – Langdon 2013-04-25 20:20:17
@rajkamal謝謝,這項工作,但只爲href,但我也'ng-click',併爲此行動此方法不起作用。我更新了刪除操作示例,以查看我的意思。例如。我需要在模板ng-click =「doAction({name:'delete',id:row.id})」',如果我爲ng-click創建了類似的插值,這是行不通的。這個動作被插入ng-click,但可能是角度不知道它。你知道如何解決它嗎?謝謝 – MarekLi 2013-04-26 09:39:13