1

Я хочу написать фильтр по массиву внутри директивного контроллера с подтверждением. Я работаю над управлением загрузкой файлов, где пользователь может выбрать несколько файлов, как только пользователь выбирает файлы, которые мне нужны, чтобы показать все файлы в таблице с опцией удаления.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]); 
          } 
         }); 
        }); 
       } 
      }; 
     }]); 

В вышеприведенном коде я хочу, чтобы фильтр для дублирования проверялся, когда я нажимаю файлы данных на объект файлов.

Просьба указать мне лучший способ достичь этого.

Заранее спасибо

ответ

-1

Я собираюсь ответить на ваш вопрос в заголовке, а затем ваш конечной цели, так как кажется, вы просто пытаетесь получить $filter объект в вашей директиве. Вы можете ввести его так:

app.directive('someDirectiveName',['$parse','$filter',function($parse,$filter) { 
    return { 
    restrict: 'A', 
    link: function(scope, element, attrs) { 
     $filter(filter)('yada','yada'); 
    } 
    } 
}]);