我想先将文件分组,然后按照扩展名上传它们(扩展名不能在上传信息定义的mime类型属性中定义。所以我使用了由angular-filter定义的 groupBy 和而是使用函数来获取扩展名,将属性(例如'file.name')放入过滤器Im。 所以我希望我的预加载文件如下所示:
file3.Extension1
file1.Extension1
file4.Extension2
file2.Extension2
这是我的EXAMPLE
我的代码:
<ul>
<li ng-repeat="f in files | groupBy: fileExtension" style="font:smaller">
{{f.name}}
</li>
</ul>
$scope.fileExtension = function(file) {
return file.name.split('.').pop();
};
任何建议都表示赞赏!
答案 0 :(得分:2)
我会将您的文件名列表转换为ngController或服务内的文件组列表。在视图中绑定到这个转换后的集合变得微不足道。
$scope.groups = groupByExt(filenames);
function groupByExt(filenames) {
var extensions = [];
var groups = [];
angular.forEach(filenames, function(item) {
var extension = item.substring(item.lastIndexOf(".")+1);
if (!extensions[extension]) {
var group = { name: extension, files: [] };
extensions[extension] = group;
groups.push(group);
group.files.push({ name: item });
}
else {
var group = extensions[extension];
group.files.push({ name: item});
}
});
return groups;
}
HTML
<ul>
<li ng-repeat="group in groups">
{{ group.name }}
<ul>
<li ng-repeat="file in group.files">
{{ file.name }}
</li>
</ul>
</li>
</ul>
您还可以设置$ watchers,以便在原始文件名列表更改时更新文件组:
$scope.$watchCollection('filenames', function(newVal, oldVal) {
if(newVal !== oldVal) {
$scope.groups = groupByExt(newVal);
}
});
我会避免使用过滤器,因为过滤器不应该更改基础项的引用(无限摘要问题)