Я хочу написать фильтр по массиву внутри директивного контроллера с подтверждением. Я работаю над управлением загрузкой файлов, где пользователь может выбрать несколько файлов, как только пользователь выбирает файлы, которые мне нужны, чтобы показать все файлы в таблице с опцией удаления.AngularJs - Как написать настраиваемый фильтр внутри директивного контроллера
Мне нужно несколько утверждений, например, мне нужно показать сообщение пользователю, если пользователь выбирает уже выбранные вложения и проверки размера файла.
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link href="style.css" rel="stylesheet" />
<script data-semver="1.4.3" src="https://code.angularjs.org/1.4.3/angular.js" data-require="[email protected]"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<p>Hello {{name}}!</p>
<input type="file" ng-file-model="files" multiple />
<button type="button" ng-click="upload()">Upload</button>
<p ng-repeat="file in files">
{{file.name}}
<button type="button" class="btn btn-danger btn-xs" data="{{file.name}}" ng-click="remove(file.name)">
<span class="glyphicon glyphicon-trash">Remove</span>
</button>
</p>
</body>
</html>
var app = angular.module('myApp', []);
app.controller('MainCtrl', function($scope) {
$scope.name = 'World';
$scope.files = [];
$scope.upload=function(){
alert($scope.files.length+" files selected ... Write your Upload Code");
};
$scope.remove=function(fileName){
alert(fileName);
for(var i=0;i<$scope.files.length;i++) {
if($scope.files[i].name === fileName) {
$scope.files.splice(i,1);
break;
}
}
// $scope.files.splice(0,1);
console.log($scope.files[0]._file);
console.log($scope.files.length);
};
});
app.directive('ngFileModel', ['$parse', function ($parse) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
var model = $parse(attrs.ngFileModel);
var isMultiple = attrs.multiple;
var modelSetter = model.assign;
var values = [];
element.bind('change', function() {
angular.forEach(element[0].files, function (item) {
var value = {
// File Name
name: item.name,
//File Size
size: item.size,
//File URL to view
url: URL.createObjectURL(item),
// File Input Value
_file: item
};
values.push(value);
});
scope.$apply(function() {
if (isMultiple) {
modelSetter(scope, values);
} else {
modelSetter(scope, values[0]);
}
});
});
}
};
}]);
В вышеприведенном коде я хочу, чтобы фильтр для дублирования проверялся, когда я нажимаю файлы данных на объект файлов.
Просьба указать мне лучший способ достичь этого.
Заранее спасибо