javascript - Angular + Bootstrap 中的事件按钮状态

标签 javascript angularjs twitter-bootstrap

看似简单的问题,但实际上我遇到了麻烦。

Plunk here

基本上我有一个 ng-repeat 按钮,然后在单击按钮后会显示一段文本。但是,当我单击一个按钮时,我想隐藏所有其他 按钮的文本 block ,并从其他按钮中删除事件状态。基本上一次只能显示 1 个按钮文本 block 。

看起来很简单,但是 ng-hide 处理范围 (scope: true) 的方式意味着我无法真正查看其他范围并关闭它们。另一件事是,如果可能的话,我不想更改 ng-repeat 中的实际数组。这是来自 API 的数据,我必须发回并且我尝试不这样做如果可以的话,改变实际的数据结构。

<div class="row" ng-repeat="button in buttons">
    <div class="col-sm-2">
        <button ng-click="showInfo = !showInfo" class="btn btn-primary">{{button.name}}</button>
    </div>
    <div ng-show="showInfo" class="col-sm-3">
        <div class="alert alert-success">{{button.extraInfo}}</div>
    </div>
</div>

和JS

app.controller('MainCtrl', function($scope) {
  $scope.buttons = [
    { name: 'One', extraInfo: 'Extra info for button 1' },
    { name: 'Two', extraInfo: 'Extra info for button 2' },
    { name: 'Three', extraInfo: 'Extra info for button 3' }
  ];
});

最佳答案

我建议创建与 buttons 数组长度相同的新数组,该数组将包含 bool 值以指示项目在何处处于事件状态。

我没有登录 plunk,所以这里是你的修改版本。

index.html

  <body ng-controller="MainCtrl as vm">
    <div class="row" ng-repeat="button in buttons track by $index">
      <div class="col-sm-2">
        <button ng-click="vm.setActive($index)" ng-class="vm.isActive[$index] ? 'btn btn-primary' : 'btn'">{{button.name}}</button>
      </div>
      <div ng-show="vm.isActive[$index]" class="col-sm-3">
        <div class="alert alert-success">{{button.extraInfo}}</div>
      </div>
    </div>
  </body>

应用程序.js

app.controller('MainCtrl', function($scope) {
  $scope.buttons = [
    { name: 'One', extraInfo: 'Extra info for button 1' },
    { name: 'Two', extraInfo: 'Extra info for button 2' },
    { name: 'Three', extraInfo: 'Extra info for button 3' }
  ];
  var vm = this;
  vm.isActive =[];
  for(var i=0, len=$scope.buttons.length; i < len; i++){
      vm.isActive[i] = false;
    }

  vm.setActive = function(ind) {
    for(var i=0, len=vm.isActive.length; i < len; i++){
      vm.isActive[i] = i===ind;
    }
  }

});

关于javascript - Angular + Bootstrap 中的事件按钮状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28461181/

相关文章:

javascript - Angular - 一段时间后删除类(class)

javascript - 多个 CSS 动画对齐问题

twitter-bootstrap - Bootstrap 3, Accordion 切换 - 字形默认状态?

javascript - 如何正确地为包含多个类的模块创建一个入口点?

javascript - React/Redux reducer 不会注册 Promise 中的错误

javascript - Paypal 表单问题的单选按钮选择

javascript - 在 Cordova、Ionic 中将 POST 响应保存为文件 (.pdf)

javascript - 使 'this' 等于 Javascript 函数赋值中的调用者

javascript - Angular 服务的返回 promise

c# - 将 fontawesome 图标添加到 asp.net 按钮