AngularJs: How to check for changes in file input fields?

前端 未结 15 1175
傲寒
傲寒 2020-11-22 09:06

I am new to angular. I am trying to read the uploaded file path from HTML \'file\' field whenever a \'change\' happens on this field. If i use \'onChange\' it works but when

15条回答
  •  悲哀的现实
    2020-11-22 09:48

    Similar to some of the other good answers here, I wrote a directive to solve this problem, but this implementation more closely mirrors the angular way of attaching events.

    You can use the directive like this:

    HTML

    
    

    As you can see, you can inject the files selected into your event handler, as you would inject an $event object into any ng event handler.

    Javascript

    angular
      .module('yourModule')
      .directive('fileChange', ['$parse', function($parse) {
    
        return {
          require: 'ngModel',
          restrict: 'A',
          link: function ($scope, element, attrs, ngModel) {
    
            // Get the function provided in the file-change attribute.
            // Note the attribute has become an angular expression,
            // which is what we are parsing. The provided handler is 
            // wrapped up in an outer function (attrHandler) - we'll 
            // call the provided event handler inside the handler()
            // function below.
            var attrHandler = $parse(attrs['fileChange']);
    
            // This is a wrapper handler which will be attached to the
            // HTML change event.
            var handler = function (e) {
    
              $scope.$apply(function () {
    
                // Execute the provided handler in the directive's scope.
                // The files variable will be available for consumption
                // by the event handler.
                attrHandler($scope, { $event: e, files: e.target.files });
              });
            };
    
            // Attach the handler to the HTML change event 
            element[0].addEventListener('change', handler, false);
          }
        };
      }]);
    

提交回复
热议问题