Javascript 对阵列进行更改时,如何重新绘制ng repeat?

Javascript 对阵列进行更改时,如何重新绘制ng repeat?,javascript,arrays,angularjs,angularjs-directive,angularjs-ng-repeat,Javascript,Arrays,Angularjs,Angularjs Directive,Angularjs Ng Repeat,我有一个对象数组,每个对象可以有稍微不同的数据。我在选择要显示的正确指令的指令上使用ng repeat。“display”指令接收对象并以正确的格式显示数据。这一切都很好 现在我需要重新组织数组的顺序。当我更新数组时,“display”指令不会重新排序,只会更改数据。例如,大多数数据集都有一个“title”字段,因此这些字段会更新,但“display”不会 如何最好地刷新ng repeat,以便它正确地重新排列“display”指令 我可以发布代码,但我觉得这更像是一个概念性的问题 HTML:

我有一个对象数组,每个对象可以有稍微不同的数据。我在选择要显示的正确指令的指令上使用ng repeat。“display”指令接收对象并以正确的格式显示数据。这一切都很好

现在我需要重新组织数组的顺序。当我更新数组时,“display”指令不会重新排序,只会更改数据。例如,大多数数据集都有一个“title”字段,因此这些字段会更新,但“display”不会

如何最好地刷新ng repeat,以便它正确地重新排列“display”指令

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

HTML:


模块生成器:

    (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);
        }
    }

})();
(函数(){
"严格使用",;
有棱角的
.module('应用程序电子邮件编辑器')
.指令(“moduleBuilder”,moduleBuilder);
函数模块生成器($compile){
var指令={
链接:链接,
限制:“EA”
};
返回指令;
功能链接(范围、元素、属性){
var module=scope.build.modules[attrs.module];
var模板=“”;
开关(模块名称){
案例“moduleTypeOne”:
模板=”;
打破
案例“moduleTypeTwo”:
模板=”;
打破
违约:
打破
}
html(模板);
$compile(element.contents())(范围);
}
}
})();
数据样本:

顺便说一句,html5Sotable是重新排序的界面

您在跟踪$index时遇到的问题,在这种情况下,仅当$index发生变化时才重新渲染元素

因此,如果数组中确实存在重复项,则应使用其他方法跟踪它。

能否提供一些示例代码?当项被重新排序时,它们各自的模板在DOM中被重新排序。也许您还需要在表达式中使用
track by
?由于angular的双向绑定特性,这实际上是一个实现问题,而不是概念问题。有一些内置的过滤器用于管理对象的顺序,这些过滤器工作得很好,但是angular文档提到“您需要注意,JavaScript规范没有定义对象返回的键的顺序。”不清楚您是否对数组中的对象重新排序,或者简单地重新排序对象的键。在第2段中提到,模板不会重新排序,只有数据会重新排序。我将准备代码。通过使用$compile重新编译要重新排序的部分?首先,
$index
不是项目在数组中位置的表示,它只是由
ng repeat
指定的任意值。因此,如果您使用
$index
值试图从数组中找到要使用的正确模板,您将无法获得预期的结果。好的,如果我通过服务器端跟踪,生成的uid。。。好奇,我要试试看。
    (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);
        }
    }

})();