2017-01-11 7 views
1

配列からスプライスアイテムを試していますが、そのたびに間違ったアイテムが削除されます。私はorderByを使って配列配列をフィルタリングするので、DOM上の配列がコントローラ内の配列と異なっていると思います。私の質問は、フィルタリングした後でも、配列から適切な項目を正しくスプライスする方法と、コントローラでorderByフィルタを使用できる方法があることです。ngの繰り返し中に配列が間違った角度でスプライスされる

相続人は私のコントローラ

office.controller('notificationCtrl',['$scope',$http',function($scope,$http){ 

    $scope.latest = [ 
     { 
      id:1, 
      date : "2017-01-11T19:33:17.307452", 
      arrived: false, 
      location : "europe" 
     }, 
     { 
      id: 2, 
      date: "2017-01-11T20:19:47.745673", 
      arrived:false, 
      location : "africa" 
     } 

    ] 

    $scope.accept = function(array,index){ 
     array.splice(index,1) 
    } 
}] 

Source.html

<div ng-repeat="recent in latest | orderBy : recent.date : true"> 
    <button ng-click="accept(latest,$index)">Accept</button> 
</div> 

EDIT 要求されたように私は、私は2番目の項目をスプライスしようとした場合、それはスパイス上記のデータでは、例のデータを追加しました最初の代わりに。

+0

サンプルデータを提供できますか? –

+0

@PritamBanerjeeがリクエストを編集しました – HackAfro

答えて

0

最後にトラックを追加すると、期待通りに機能すると思います。そしてまた、ヨーヨーは、あなたがこのような引用符を持つプロパティを示す必要があり、あなたの最初のパラメータに誤りがあります。

<div ng-repeat="recent in latest | orderBy:'date':true track by $index"> 
    <button ng-click="accept($index)">Accept</button> 
</div> 

あなたのコントローラ:

$scope.accept = function(index){ 
    $scope.latest.splice(index,1) 
} 

コントローラ内でフィルタを使用する方法:

var orderedArray= $filter('orderBy')($scope.latest, 'date'); 
+0

私はこれをまだ試してみました。私は配列のプロパティの1つを使用してフィルタリングしているので、コントローラでフィルタを使用するのは難しいでしょう。例えば。最近の最新| orderBy: '最近。日付 ':真。コントローラーでこれを行うことはできますか? – HackAfro

+0

あなたは最近何を送信して達成しようとしていますか? –

+0

最近の日付を使用してアイテムを注文しようとしています – HackAfro

1

https://docs.angularjs.org/api/ng/directive/ngRepeatここに書いたように、variable in expression as alias_expressionを使用すると、注文/フィルタリング後にリピータの中間結果を取得/保存できます。

alias_expressionとして表現における変数 - あなたはまた、フィルタが適用された後、その後リピータの中間 結果を格納します オプションのエイリアスの式を提供することができます。通常、 これは、リピータのフィルタが でアクティブになっているが、フィルタ処理された結果セットが空の場合に特別なメッセージを表示するために使用されます。

例:アイテムのアイテム|フィルタ:結果としてのxは、結果として返された項目の フラグメントを格納しますが、項目 がフィルタで処理された後にのみ格納されます。

[変数名]は演算子ではなくngRepeatマイクロシンタックスの 部分であるため、最後にのみ使用できます( は式の中にありません)。

例:アイテムのアイテム|フィルタ:x | orderBy:order | limitTo:結果として制限する。

+0

私に尋ねるのが気にならないならば。私はこの問題を解決するためにこれをどのように使用するのですか? – HackAfro

+0

配列から削除すると、フィルタリングされた結果内の$ indexをフィルタリングされていないソース配列に渡しています。それが間違った要素を削除する理由です。 'ng-click =" accept(alias_expression、$ index) "'を実行する必要があります。ここで 'alias_expression'は結果の配列です。 –

0

だから私は単に

var latest = [ 
    { 
     id:1, 
     date : "2017-01-11T19:33:17.307452", 
     arrived: false, 
     location : "europe" 
    }, 
    { 
     id: 2, 
     date: "2017-01-11T20:19:47.745673", 
     arrived:false, 
     location : "africa" 
    } 

] 

$scope.latest = latest.reverse() 

ように私のリストを反転させることによって、これを解決それから私は、フィルタを削除し、リストだけでNGリピートをしました。

<div ng-repeat="recent in latest"> 
    <button ng-click="accept($index)">Accept</button> 
</div> 
関連する問題