그리드와 같은 재사용 가능한 지시문을 만들려고합니다. 컨트롤러에서 데이터와 동작 (편집, 삭제, ...)을 정의하고 싶습니다.ng-repeat에 대한 각도 지시어의 변수를 미리 렌더링하려면 어떻게해야합니까?
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이 작동하지 않습니다. 나는 컴파일하는 것을 시도하지만, 그것을 할 수 없었다. 너 나 좀 도와 줄 수있어? 행동 목록에 하위 지시어 수 있습니다, 문제는 동일합니다. 나는 다음 <a href="{{action.href}}/{{row.id}}">
을 Ctrl 키를 href:'#edit'
조치의 정의를 수정 할 수 있습니다 알고 있지만,이 지침의 다른 용도에에서 다른 PARAMS 될 수 있기 때문에 이것은 아주 좋은 해결책이 아니다 : http://plnkr.co/edit/O7hXXgQb0Num1xZs5Xrt?p=preview
참고 : 여기에
는 plunker 라이브 템플릿입니다 내가 행동에 전달할 수있는$scope.data
항상
{{row.id}}
업데이트 예를 : 삭제
하단에 자신의 메모를 확인 그의 질문. ;) – Langdon
@rajkamal 감사합니다.이 작업은 href에만 해당하지만 'ng-click'도 있습니다.이 작업에 대해서는이 접근 방식이 작동하지 않습니다. 내가 의미하는 것을보기 위해 삭제 동작에 대한 예를 업데이트했습니다. 예 : 템플릿'ng-click = "doAction ({name : 'delete', id : row.id})에 필요합니다. 'ng-click'에 대해 비슷한 보간을 만들면 이것이 작동하지 않습니다. 이 동작은 ng-click에 삽입되지만 각형 상태 일 수도 있습니다. 그것을 고치는 방법을 알고 있습니까? 덕분에 – MarekLi