【问题标题】:ng-show ng-hide in ng-repeat how to click/trigger for each wrapped blockng-repeat 中的 ng-show ng-hide 如何单击/触发每个包裹的块
【发布时间】:2016-04-15 03:36:41
【问题描述】:

如何单击隐藏/显示 div 仅包含在 li 中的那些 div/类,现在如果我单击第一个项目,两个项目都会显示。有没有像 jQuery 一样在 Angular 中检查 this 的方法?

在线示例:http://jsfiddle.net/qp0x1zcc/

 <div ng-app="editer" ng-controller="myCtrl" class="container">
  <ul ng-repeat="item in items">
    <li ng-click="show = !show" ng-init='show = false'>
      <span ng-hide="show">{{item.name}}</span>
      <form ng-show="show">
        <input ng-model="item.name">
      </form>
    </li>
    <li ng-click="show = !show">
      <span ng-hide="show">{{item.d}}</span>
      <form ng-show="show">
        <input ng-model="item.d">
      </form>
    </li>
  </ul>
</div>

【问题讨论】:

  • 显示与这些项目中的任何一个都不相关。您可以使用 show[item.id] 或将显示状态存储在项目对象中。

标签: javascript angularjs


【解决方案1】:

试试这样。简单明了。

var editer = angular.module('editer', []);
function myCtrl($scope) {
$scope.index = -1;
  $scope.index2 = -1;
  $scope.items = [{
    name: "item #1",
    d: "names 1"
  }, {
    name: "item #2",
    d: "names 2"
  }, {
    name: "item #3",
    d: "names 3"
  }];
  $scope.setIndex = function(item){
    $scope.index = $scope.items.indexOf(item);
     $scope.index2 = -1;
  
  }
    $scope.setIndex2 = function(item){
       $scope.index = -1;
     $scope.index2 = $scope.items.indexOf(item);
  
  }
  
  $scope.clearIndex = function(){
    $scope.index = -1;
     $scope.index2 = -1;
    }
  
}
.container {
  margin-top: 10px;
  font-family: arial;
}

.container header {
  padding-bottom: 20px;
  border-bottom: 1px solid black;
}

ul,
input,
.container {
  padding: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="editer" ng-controller="myCtrl" class="container">


  <ul ng-repeat="item in items">

    <li ng-click="setIndex(item)"  ng-dblClick = "clearIndex()">
      <span ng-show="index != $index">{{item.name}}</span>
      <form ng-show="index == $index">
        <input ng-model="item.name">
      </form>
    </li>
     <li ng-click="setIndex2(item)"  ng-dblClick = "clearIndex()">
           <span ng-show="index2 != $index">{{item.d}}</span>
      <form ng-show="index2 == $index">
        <input ng-model="item.d">
      </form>
    </li>
  </ul>
</div>

【讨论】:

  • 感谢您的回答。但可以单独点击它们吗?不在一起
  • 表示 item.id 和 item.name 是单独的?
  • 感谢更新的答案,但是当我点击第 3 项时,第 3 项和第 3 项都被激活了
  • 我更新了答案。我建议这个答案,因为我不想将额外的数据添加到数组中。如果向数组添加额外信息对您来说不是问题,这是@Mateusz Sip 所说的好方法。
  • 很棒的答案!但不明白为什么 `ng-dblClick = "clearIndex()"` ?为什么需要双击?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 2014-03-27
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
相关资源
最近更新 更多