2017-01-11 33 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> 

編輯 我添加了例如數據的要求,在上面,如果我嘗試拼接的第二個項目的數據,香料第一個代替。

+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

我試過這個它仍然不起作用。在控制器中使用過濾器會很困難,因爲我使用其中一個數組屬性進行過濾。例如。近期最新| orderBy:'最近。日期':是。這可以在控制器中完成嗎? – HackAfro

+0

你最近發送的內容是什麼? –

+0

我在嘗試使用最近的日期訂購商品 – HackAfro

1

如此處所述https://docs.angularjs.org/api/ng/directive/ngRepeat您可以使用variable in expression as alias_expression在訂購/過濾後獲取/存儲中繼器的中間結果。

變量表達爲alias_expression - 還可以提供一種 可選別名表達然後將存儲中間結果 中繼器已經被應用的過濾器之後。通常, 用於在中繼器的 活動過濾器處於活動狀態時呈現特殊消息,但過濾的結果集爲空。

例如:item in items |過濾器:作爲結果的x將存儲重複項目的 片段作爲結果,但僅在通過過濾器處理了項目 之後。

請注意`as [variable name]不是運算符,而是ngRepeat微語法的一部分,因此它只能用於末尾(而不是表達式中的運算符)。

例如:item in items |過濾器:x | orderBy:order | limitTo:限制爲結果。

+0

如果您不介意我問。我如何使用它來解決我的問題? – HackAfro

+0

當你從你的數組中刪除時,你將過濾結果中的$ index傳遞給NOT過濾的源數組。這就是爲什麼它刪除了錯誤的元素。您應該'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>