Sort/GroupBy 个使用 AngularJS 预上传的文件
Sort/GroupBy files pre-uploaded using AngularJS
我想把我的文件分组,然后按扩展名上传(扩展名不能在上传信息定义的mime类型属性中定义。所以我用groupBy定义通过 angular-filter 而不是将属性(例如 'file.name')放入过滤器 Im 使用函数来获取扩展。
所以我希望我的预加载文件如下所示:
- 分机 1:
file3.Extension1
file1.Extension1
- 分机 2:
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();
};
欢迎任何建议!
我会将您的文件名列表转换为 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);
}
});
我会避免使用过滤器,因为过滤器不应更改基础项目的引用(无限摘要问题)
我想把我的文件分组,然后按扩展名上传(扩展名不能在上传信息定义的mime类型属性中定义。所以我用groupBy定义通过 angular-filter 而不是将属性(例如 'file.name')放入过滤器 Im 使用函数来获取扩展。 所以我希望我的预加载文件如下所示:
- 分机 1:
file3.Extension1
file1.Extension1
- 分机 2:
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();
};
欢迎任何建议!
我会将您的文件名列表转换为 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);
}
});
我会避免使用过滤器,因为过滤器不应更改基础项目的引用(无限摘要问题)