2016-04-16 13 views
3

AngularJSを使用すると、項目を1回追加することができます。以下のコードスニペットでは、Fと入力して項目のリストに追加します。私や他のユーザーがFをもう一度追加することを制限する方法はありますか?配列に新しい項目を追加するpush()関数を呼び出す前にng-repeat一度だけ項目を追加する

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp"> 
 
    <div ng-controller="MyCtrl"> 
 
     <ul> 
 
      <li ng-repeat="item in items track by $index">{{item}}</li> 
 
     </ul> 
 
     <input ng-model="newItem" type="text"></input> 
 
     <button ng-click="add(newItem)">Add</button> 
 
    </div> 
 
</div> 
 

 
<script> 
 
var app = angular.module('myApp', []); 
 

 
app.controller('MyCtrl', function($scope) { 
 
    $scope.items = ["A", "B", "C", "D"]; 
 
    $scope.add = function(item) { 
 
     $scope.items.push(item); 
 
    }; 
 

 
}); 
 
</script>

答えて

3

あなたの方法で手動でチェックする必要があります。あなたはSetを使用することができます

$scope.add = function (item) { 
    if ($scope.items.indexOf(item) === -1) { 
     $scope.items.push(item); 
    } 
}; 

ES6

Setオブジェクトを使用すると、これはたくさん助け

$scope.items = new Set(["A", "B", "C", "D"]); 

$scope.add = function (item) { 
    $scope.items.add(item); 
}; 
+0

おかげで、あらゆるタイプのユニーク値を格納することができます! – JBlaze321

+0

こんにちは。簡単な質問は、アイテムの代わりにアイテムIDを使用して表示されたES5メソッドで手動でチェックする方法ですか? $ scope.items = [{"name": 'A'、id:0}、{"name": "B"、id:1}、{"name": "C"、id:2} 、{"name": "D"、id:3}]; – JBlaze321

0

あなたは、アレイ内の同じ項目を見つけた場合、あなたは検索することができます。私はこのようなコードを編集しますその場合

app.controller('MyCtrl', function($scope) { 
    $scope.items = ["A", "B", "C", "D"]; 

    $scope.add = function(item) { 
     var found = false; 

     for(var i = 0; i< $scope.items.length; i++){ 
      if(item == scope.items[i]) 
      found = true; 
      return; //end the for loop 
     } 

     //new item not found in the array 
     if(!found) $scope.items.push(item); 
    }; 

}); 
0

あなたは要素がすでにあるかどうかを確認し、それに基づいて追加するには、WebブラウザでJavaScriptのArray.prototype.someを使用することができます。

$scope.add = function(item) { 

    if (!$scope.items.some(isAlreadyPresent)) { 
     $scope.items.push(item); 
    } else { 
     console.log('item already present'); 
    } 

    function isAlreadyPresent(ele) { 
     return ele === item; 
    } 
}; 

はのためにMDNを参照してください。 someの詳細:

関連する問題