2

我有以下内容:

  <div class="row" ng-repeat="item in items " ng-cloak>
    <div ng-show="unique{{$index}}" class="ng-hide">
    <button ng-click="remove('{{$index}})">Remove</button>
  </div>

我想为每个重复的 div 项创建一个唯一值,如下所示:

<div ng-show="unique1" class="ng-hide">
  <button ng-click="remove('unique1')">Remove</button>
<div ng-show="unique2" class="ng-hide">
  <button ng-click="remove('unique2')">Remove</button>

这样在我的控制器中我可以有一个动作,在本例中为 remove(),它将切换该属性。

scope.remove = function(uniqueAttribute) {
  $scope[uniqueAttribute] = false;

}

我能够使用 $index 生成 html,但该代码不起作用,我不确定如何去做。

4

3 回答 3

3

您可以为每个对象添加一个名为的新字段show,然后您可以消除与$index.

<div ng-app ng-controller="Ctrl">
    <div class="row" ng-repeat="item in items" ng-cloak>
        <div ng-show="item.show">
            <button ng-click="remove(item)">Remove</button>
        </div>
    </div>
</div>

function Ctrl($scope) {
    $scope.items = [{
        item1: 1,
        show: true
    }, {
        item1: 2,
        show: true
    }, {
        item1: 3,
        show: false
    }];

    $scope.remove = function (item) {
        item.show = false;
    }
}

DEMO

于 2013-08-21T02:46:58.403 回答
2

Angular 中的大多数属性要么被评估,要么被插值。评估就像 的受限形式eval(),插值是在填充双花括号时。看起来您希望对ng-show进行插值然后评估,但没有任何内置指令执行此操作。他们做一个或另一个,但不是两者兼而有之。具体来说ng-show,它只是进行评估,所以你的花括号从字面上传递。这将是一个无效的表达式。

我的建议是:由于ng-repeat为每个重复项创建一个新范围,您可以这样做:

<div class="row" ng-repeat="item in items" ng-cloak>
  <div ng-show="!hide" class="ng-hide">
  <button ng-click="hide = true">Remove</button>
</div>

当然,为什么要保留一堆隐藏的物品。为什么不具有ng-click="remove(item)"从项目中删除的删除功能?然后ng-repeat自然而然地更新。

$scope.remove = function(item) {
  var index = this.items.indexOf(item);
  if (index != -1) {
    this.items.splice(index);
  }
};

或类似的东西。

于 2013-08-21T04:08:37.283 回答
2

您不需要{{ }}在 Angular 的属性中使用。它将自动评估您的范围。

<div class="row" ng-repeat="item in items" ng-cloak>
    <div ng-show="'unique' + $index" class="ng-hide">
    <button ng-click="remove('unique' + $index)">Remove</button>
  </div>
于 2013-08-21T03:56:55.300 回答