2014-10-28 2 views
1

Я пытаюсь создать контроллер для каждого элемента в моем аккордеоне ng-bootstrap, но масштабирование не работает, как я ожидаю. Я делаю что-то неправильно? Если я добавлю контроллер в div внутри моей группы аккордеона ng-repeat, это, похоже, сработает.Могу ли я использовать ng-контроллер в группе аккордеона бутстрапа?

В следующем примере SubVar не отображается, но SubVar2 делает.

http://plnkr.co/edit/VLFT133dz3uae887S6qI?p=preview

HTML

<accordion close-others="oneAtATime"> 
    <accordion-group ng-repeat="group in groups" ng-controller="SubCtrl"> 
    <accordion-heading> 
     {{group.title}} can have markup, too! <i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-down': status.open, 'glyphicon-chevron-right': !status.open}"></i><br> 
     SubVar: {{sub_var}} 

    </accordion-heading>  
    {{group.content}}<br> 
    SubVar: {{sub_var}} 
    <div ng-controller="SubCtrl"> 
     SubVar2: {{sub_var}} 
    </div> 
    </accordion-group> 
</accordion> 

Javascript

angular.module('ui.bootstrap.demo', ['ui.bootstrap']); 
angular.module('ui.bootstrap.demo').controller('AccordionDemoCtrl', function ($scope) { 
    $scope.oneAtATime = true; 

    $scope.groups = [ 
    { 
     title: 'Dynamic Group Header - 1', 
     content: 'Dynamic Group Body - 1' 
    }, 
    { 
     title: 'Dynamic Group Header - 2', 
     content: 'Dynamic Group Body - 2' 
    } 
    ]; 
}); 
angular.module('ui.bootstrap.demo').controller('SubCtrl', function ($scope) { 
    console.log("SUBCTRL ...", $scope.group.title); 
    $scope.sub_var = $scope.group.title[$scope.group.title.length-1] 
    console.log("SUBCTRL ...", $scope.sub_var); 
}); 
+1

Похоже, аккордеон-группы transcludes данных внутри и поддерживает его собственный контроллер и возможности для @header и isOpen и т. д., поэтому я скажу, если вы не нарушите директиву. --- https://github.com/angular-ui/bootstrap/blob/master/src/accordion/accordion.js#L57 – Dylan

ответ

3

Я работал вокруг этого до сих пор обертывания группы аккордеона в DIV с моими нг-повтором и нг-контроллером.

не настолько чист, как хотелось бы, но это, кажется, работает:

http://plnkr.co/edit/OpetDEMWwvBf94J04Mnr?p=preview

<div ng-controller="AccordionDemoCtrl"> 

    <accordion close-others="oneAtATime"> 
    <div ng-repeat="group in groups" ng-controller="SubCtrl"> 
    <accordion-group> 
     <accordion-heading> 
      {{group.title}} can have markup, too! <i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-down': status.open, 'glyphicon-chevron-right': !status.open}"></i><br> 
      SubVar: {{sub_var}} 

     </accordion-heading> 

     {{group.content}}<br> 
     SubVar: {{sub_var}} 
     <div ng-controller="SubCtrl"> 
     SubVar2: {{sub_var}} 
     </div> 
    </accordion-group> 
    </div> 
    </accordion> 
</div> 
+0

лучше разместить div внутри группы, не допустить его взлома – Blowsie

+0

Прошло некоторое время с тех пор Я подумал об этой проблеме, но я думаю, что мне нужны несколько аккордеонов. Итак, аккордеонная группа на повторение с повторением. Если я положил div с повторением в группе, у меня был бы один элемент аккордеона со всеми моими группами. –

Смежные вопросы