2016-05-30 22 views
1

我正在使用Angular,並且我的部分頁面使用ng-repeat來顯示一些bug跟蹤器故障單。作爲網站的一部分,我也想提供搜索門票的功能。我能夠按照自己的意願讓這部分工作,如果我只是追加新票,他們就會表現出色。刪除Angular中的ng-repeat中的所有元素

但是我希望能夠,如果用戶搜索,刪除所有當前可見的票證div並將其替換爲搜索結果。

我最初的想法,因爲我的ng-repeat設置爲item in tickets track by item.id,只是設置$scope.tickets等於新數據。但是,這並沒有導致Angular更新DOM。

於是,我嘗試設置$scope.tickets等於一個空數組和然後設置它等於新的數據:

$scope.$apply(function() { 
    $scope.tickets = []; 

    $scope.tickets = data; 
}); 

仍然沒有更新到DOM,即使console.log($scope.tickets)顯示正確的對象。

我所知道的

$scope.$apply(function() { 
    array.splice(index, 1); 
}); 

的方法來刪除單個元素,但我不知道我怎麼會申請,取消所有的元素。

我會嘗試讓一個Plunkr或JSBin很快加入到Q中。

什麼是正確的方法讓我Angular用數據創建的新元素替換所有當前元素?

+0

有你沒有在你的NG-重複表達式中使用的過濾器的原因|它會做隱藏的工作(在門票軌道例如'項目由item.id過濾器:表達式comparator') /只顯示您正在搜索的div。 檢查AngularJS文檔https://docs.angularjs.org/api/ng/filter/filter – SeRu

+0

我們需要查看更多的代碼上下文。沒有足夠的顯示讓我們能夠知道爲什麼視圖不會更新。始終提供[mcve] – charlietfl

回答

1

嘗試設置array.length = 0 這會刪除所有元素,但不會刪除對數組的引用,實際上這似乎是您的情況中的問題。

但另一種方式是有一個額外的數據包。

例如有$scope.data.tickets那麼你可以像平常一樣重新編號tickets。重要的是,你必須參考你的項目使用item in data.tickets

+0

感謝您的快速回復。不幸的是,這並沒有奏效。任何不存在於新數據中的div都將保留在那裏。 –

+0

你可以試試我的更新嗎? – Luke

+0

我不知道爲什麼,但工作:)謝謝! –

0

你測試$watch

$scope.$watch('tickets', function() { 
    //update data HERE 
});