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