【问题标题】:Angular-UI-Bootstrap accordion not openingAngular-UI-Bootstrap 手风琴未打开
【发布时间】:2025-12-06 07:25:01
【问题描述】:

我的手风琴没有打开。我最初认为这是由于 ng-view 引起的,因为报告了许多错误。我尝试了theseboth 解决方案,但似乎不是a 标签导致了问题。我还将手风琴移到了 ng-view 之外,但它们仍然没有打开。

我正在使用 bootstrap 3 和 angular-ui-bootstrap-tmpls.0.11.0.js

我的应用程序:

angular
  .module('App', [
    'ngRoute',
    'templates',
    'ui.bootstrap.tpls',
    'ui.bootstrap',
  ])

.config(function ($routeProvider, $locationProvider) {
    $routeProvider
    .when('/doctor', {
      templateUrl: 'doctor_profile.html',
      controller: 'DoctorCtrl'
    })
 $locationProvider.html5Mode(true);
})

医生档案.html:

<accordion close-others="oneAtATime">
  <accordion-group ng-repeat="doctor in doctors">

    <accordion-heading>
      <span>{{doctor.name}} </span>
    </accordion-heading>
          {{ doctor.type }}
  </accordion-group>
</accordion>

最后是我的控制器

.controller('DoctorCtrl', function($scope) {
    $scope.oneAtATime = false;

    $scope.doctors = [
      {
        name: 'Dr. Bob ',
        type: 'Orthopedic Surgery',
      },
      {
        name: 'Dr. Ted',
        type: 'Pediatritian',
      }, 

    $scope.status = {
      isFirstOpen: true,
      isFirstDisabled: false
    };

【问题讨论】:

    标签: angularjs angular-ui-bootstrap


    【解决方案1】:

    您需要将手风琴的is-open属性绑定如下:

    <accordion-group ng-repeat="doctor in doctors" is-open="status.isItemOpen[$index]">
    

    在你的控制器中

    $scope.status = {
          isItemOpen: new Array($scope.doctors.length),
          isFirstDisabled: false
        };
    
    $scope.status.isItemOpen[0] = true;
    

    打开第一组(只是一个例子)和

    $scope.status.isItemOpen[0] = false;
    

    关闭第一组。

    最好的问候

    【讨论】:

    • 这似乎不是问题。这只会打开所有手风琴,然后您仍然无法关闭它们。
    • 您需要为每个手风琴组使用一个单独的绑定属性。您执行一次 ng-repeat,这意味着每个组都绑定到控制器的 $scope.isFirstOpen 属性。这就是为什么它们都被打开了。刚刚更改了示例。