如何在更改阵列时重新绘制ng-repeat?

时间:2016-01-14 14:27:01

标签: javascript arrays angularjs angularjs-directive angularjs-ng-repeat

我有一个对象数组,每个对象的数据可能略有不同。我在指令上使用ng-repeat来选择要显示的正确指令。 “display”指令获取对象并以正确的格式显示数据。这一切都很有效。

现在我需要重新组织数组的顺序。当我更新数组时,“display”指令不会重新排序,只会更改数据。例如,大多数数据集都有一个“标题”字段,所以那些更新,但“显示”没有。

如何最好地刷新ng-repeat以便正确地重新排序“display”指令?

我可以发布代码,但我觉得这更像是一个概念性的问题。

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是重新订购的界面

1 个答案:

答案 0 :(得分:0)

你在轨道中遇到问题由$ index ,在这种情况下,角度重新渲染元素如果$ index改变了。
因此,如果您的数组中确实存在重复的项目,则应该通过其他方式对其进行跟踪。