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

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 に答える