0

我有一個對象數組,每個對象可以有稍微不同的數據。我使用ng-repeat選擇要顯示的正確指令的指令。該「顯示」指令採用該對象並以正確的格式顯示數據。這一切都很好。如何在對數組進行更改時重新繪製 - 重複?

現在我需要重新組織數組的順序。當我更新數組時,「顯示」指令不會重新排序,只有數據發生變化。例如,大多數數據集都有一個「標題」字段,所以這些更新,但「顯示」沒有。

我該如何最好地刷新ng-repeat,以便它能正確地重新排列「顯示」指令?

我可以發佈代碼,但我覺得這更像是一個概念性問題。

HTML:

<module-builder module="{{$index}}" ng-repeat="module in build.modules track by $index"></module-builder> 

模塊建設者:

(function() { 
    'use strict'; 

    angular 
     .module('app.email_editor') 
     .directive('moduleBuilder', moduleBuilder); 

    function moduleBuilder ($compile) { 
     var directive = { 
      link: link, 
      restrict: 'EA' 
     }; 
     return directive; 

     function link(scope, element, attrs) { 
      var module = scope.build.modules[attrs.module]; 
      var template = ''; 
      switch (module.Name){ 
       case 'moduleTypeOne': 
        template = "<module-type-one class='{{module.Class}}'></module-type-one>"; 
        break; 
       case 'moduleTypeTwo': 
        template = "<module-type-two class='{{module.Class}}'></module-type-two>"; 
        break; 
       default: 
        break; 
      } 
      element.html(template); 
      $compile(element.contents())(scope); 
     } 
    } 

})(); 

數據樣本: enter image description here

BTW html5Sotable是重新排序

+0

你能提供一些示例代碼嗎? [documentation](https://docs.angularjs.org/api/ng/directive/ngRepeat)表示:「當項目重新排序時,它們各自的模板在DOM中被重新排序。」也許你還需要使用'track by'在表達中? –

+0

由於角度的雙向綁定性質,這實際上是一個實現問題而不是概念問題。內置的過濾器用於管理完美工作的對象的順序,但角度文檔中提到「您需要了解JavaScript規範沒有定義爲某個對象返回的鍵的順序。」目前尚不清楚您是否重新排列數組中的對象,或者只是重新排序對象的鍵。 – Claies

+0

在第二段中提到,模板不重新排序,只有數據有效。我將準備代碼。 –

回答

0

您的問題界面在追蹤$索引,在這種情況下角度重新渲染元素只有如果$索引更改。
所以,如果你真的在你的數組中有重複項目,你應該通過別的東西來追蹤它。

+0

好吧,所以如果我跟蹤服務器端,生成的uid ...好奇,我會給這個鏡頭。 –

相關問題