【问题标题】:How to close uib-accordion from inside with a button click如何通过单击按钮从内部关闭 uib-accordion
【发布时间】:2017-03-11 01:30:15
【问题描述】:

我想通过单击按钮从内部关闭手风琴。我正在尝试将 isOpen 设置为 false,但它不起作用。有什么方法可以在单击按钮时关闭它?谢谢。

Plunker:https://plnkr.co/edit/3xMnWRPOoEHPmguaQxd0?p=preview

<div uib-accordion-group is-open="isOpen" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
  {{group.content}}
  <button ng-click="close()">close this</button>
</div>

$scope.groups = [
    {
      title: 'Dynamic Group Header - 1',
      content: 'Dynamic Group Body - 1'
    },
    {
      title: 'Dynamic Group Header - 2',
      content: 'Dynamic Group Body - 2'
    }
  ];


  $scope.isOpen = false;

  $scope.close = function(){
    $scope.isOpen = false;
  }

【问题讨论】:

    标签: javascript angularjs angular-ui-bootstrap accordion


    【解决方案1】:

    我可以通过稍微改变@MrNobody 解决方案来实现我所需要的。 https://plnkr.co/edit/cYb5jIi3LBslUDO8xfg4?p=preview

    查看:

    <uib-accordion close-others="true">
        <div uib-accordion-group is-open="isOpen[$index]" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
          {{group.content}}
          <button ng-click="close($index)">close this</button>
        </div>
      </uib-accordion>
      <button ng-click="closeFromOutside()">close from outside</button>
    

    控制器:

    $scope.isOpen = [];
    
      $scope.groups = [
        {
          title: 'Dynamic Group Header - 1',
          content: 'Dynamic Group Body - 1'
        },
        {
          title: 'Dynamic Group Header - 2',
          content: 'Dynamic Group Body - 2'
        }
      ];
    
      $scope.close = function(index){
        $scope.isOpen[index] = false;
    
      }
      $scope.closeFromOutside = function(){
        $scope.isOpen = [];
      }
    

    【讨论】:

      【解决方案2】:

      我将 isOpen 放在集合中,以便为每个手风琴丸单独切换(使每个丸单独切换)并且它可以工作,检查下面的代码:

      控制器:

      $scope.groups = [
      {
        title: 'Dynamic Group Header - 1',
        content: 'Dynamic Group Body - 1',
        isOpen: false
      },
      {
        title: 'Dynamic Group Header - 2',
        content: 'Dynamic Group Body - 2',
        isOpen: false
      }
      ];
      
      $scope.items = ['Item 1', 'Item 2', 'Item 3'];
      
      $scope.addItem = function() {
        var newItemNo = $scope.items.length + 1;
        $scope.items.push('Item ' + newItemNo);
      };
      
      $scope.close = function(group){
        group.isOpen = false;
      };
      

      查看:

      <div uib-accordion-group is-open="group.isOpen" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
        {{group.content}}
        <button ng-click="close(group)">close this</button>
      </div>
      

      我修改了你的插件: https://plnkr.co/edit/pBT0fbNJtQhgc5kZlLbO?p=preview

      【讨论】:

      • 谢谢。它工作正常,但有什么方法可以在不改变对象的情况下实现它,即不在每个对象内添加 isOpen 键?
      【解决方案3】:

      您可以在循环使用ng-repeat 时使用ng-init 分配新属性isOpen。更新了 Plunker code

      更改模板而不在控制器中添加属性:

      <div uib-accordion-group ng-init="group.isOpen=false" is-open="group.isOpen" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
        {{group.content}}
        <button ng-click="group.isOpen=false">close this</button>
      </div>
      

      编辑:

      如果您不想更改现有对象,则可以使用数组isOpen 来维护手风琴组的打开状态。 Plunker code

      <uib-accordion close-others="oneAtATime" ng-init="isOpen=[]">
      
          <div uib-accordion-group ng-init="isOpen[$index]=false" is-open="isOpen[$index]" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
            {{group.content}}
            <button ng-click="isOpen[$index]=false">close this</button>
          </div>
      
      </uib-accordion>
      

      【讨论】:

      【解决方案4】:

      您必须在显示手风琴时将$scope.isOpen 设置为true,然后$scope.isOpen = false 将关闭手风琴。

      编辑: 有笨蛋 https://plnkr.co/edit/RbbbwGaqGq8gG0JYseYw?p=preview

      【讨论】:

      • 你刚刚复制了@arsinawaz的答案。
      • 是的,我在粘贴时意识到了这一点。但这不是副本;)
      猜你喜欢
      • 2017-10-07
      • 2011-02-05
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多