1. ホーム
  2. angularjs

[解決済み] Angularjs orderByの後の$indexの誤り

2023-03-01 13:06:38

質問

私はAngular.jsの初心者ですが、配列のソートとそのソートされたデータの処理に問題があります。

私はアイテムを持つリストを持っていて、それを"Store.storeName"でソートしたいのですが、これは今のところうまくいっています。しかし、データをソートした後、私のdelete-functionはもう動作しません。私はそれがソートの後に$インデックスが間違っているため、間違ったデータが削除されるからだと思います。

どうしたら解決できますか?ビューではなく、スコープでデータを並べ替える?どのようにそれを行うには?

以下は関連するコードです。

ビューの中で

<tr ng-repeat="item in items | orderBy:'Store.storeName'">
                <td><input class="toggle" type="checkbox" ng-model="item.Completed"></td>
                <td>{{item.Name}}</td>
                <td>{{item.Quantity}} Stk.</td>
                <td>{{item.Price || 0 | number:2}} €</td>                
                <td>{{item.Quantity*item.Price|| 0 | number:2}} €</td>
                <td>{{item.Store.storeName}}</td> 
                <td><a><img src="img/delete.png" ng-click="removeItem($index)">{{$index}}</a></td>
            </tr>

そして、私のコントローラには、特定のデータを削除するためのdelete関数があります。

$scope.removeItem = function(index){
        $scope.items.splice(index,1);
    }

これは、Viewで注文する前にうまく動作します。 もし何か重要なことが欠けていたら、今教えてください。

ありがとうございます。

どのように解決するのですか?

を中継するのではなく $index - をリレーする代わりに、アイテム自体を removeItem 関数に渡すことができます。

<a><img src="img/delete.png" ng-click="removeItem(item)">{{$index}}</a>

を変更し removeItem 関数を使ってインデックスを見つけるようにします。 indexOf メソッドを使ってインデックスを見つけることができます。

$scope.removeItem = function(item){
   $scope.items.splice($scope.items.indexOf(item),1);
}