2013-09-21 2 views
13

Я использую директиву аккордеона от http://angular-ui.github.com/bootstrap/, и мне нужно иметь две кнопки в части заголовка.Угловой пользовательский интерфейс с кнопками в части заголовка

  1. Добавить - создать точно такой же аккордеон под оригиналом.
  2. Удалить - Снимите аккордеон. (первый аккордеон не может быть удален - отключите кнопку «Удалить»).

Я новичок в AngularJS и, пожалуйста, помогите мне достичь этого.

ответ

31

Просмотреть работу plunker.

Вам просто нужно добавление и удаление функции в контроллере

$scope.addGroup = function(idx, group, e) { 
    if (e) { 
     e.preventDefault(); 
     e.stopPropagation(); 
    } 

    var newGroup = angular.copy(group); 
    newGroup.no = $scope.groups.length + 1; 
    $scope.groups.splice(idx + 1, 0, newGroup); 
    }; 

    $scope.removeGroup = function(idx, e) { 
    if (e) { 
     e.preventDefault(); 
     e.stopPropagation(); 
    } 

    $scope.groups.splice(idx, 1); 
    }; 

и ng-repeat для HTML:

<accordion close-others="oneAtATime"> 
    <accordion-group heading="{{group.title}}" ng-repeat="group in groups"> 
     <accordion-heading> 
      {{ group.title }} ({{group.no}}) 
      <button class="btn btn-small" ng-click="addGroup($index, group, $event)">+</button> 
      <button class="btn btn-small" ng-click="removeGroup($index, $event)" ng-show="$index">-</button> 
     </accordion-heading> 
     {{group.content}} 
    </accordion-group> 
    </accordion> 
+0

Hi Bekos, это то, что я ищу. Вы решили мою проблему. Спасибо вам – user2801604

+0

Amazing Спасибо! Я не знал о переменной $ event, так что это была отличная помощь! –

1

поставил именно это e.originalEvent.cancelBubble = истина;

$scope.addGroup = function(idx, group, e) { 
    if (e) { 
     e.originalEvent.cancelBubble=true; 
    } 
    var newGroup = angular.copy(group); 
    newGroup.no = $scope.groups.length + 1; 
    $scope.groups.splice(idx + 1, 0, newGroup); 
    }; 

    $scope.removeGroup = function(idx, e) { 
    if (e) { 
     e.originalEvent.cancelBubble=true; 
    } 

    $scope.groups.splice(idx, 1); 
    }; 
Смежные вопросы