Как запустить ng-change с помощью fileModel || тип ввода ="файл"
Как запустить ng-change, когда есть изменение с `'
Я использую пользовательскую директиву файла для этого
Директива:
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;
element.bind('change', function() {
var values = [];
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]);
}
});
});
}
};
}]);
Как использовать ng-change с этим без использования ng-модели
HTML:
<input type="file" name="" ng-file-model="uploadThisImage" ng-change="onFileSelect($index)">
1 ответ
Решение
Директива для получения файлов ввода с ng-model
Эта директива позволяет <input type=file>
автоматически работать с ng-change
а также ng-form
директивы.
AngularJS встроенный <input>
директива не обрабатывает <input type=file>
, Для этого нужна специальная директива.
<input type="file" files-input ng-model="fileArray"
ng-change="onFileSelect()" multiple />
files-input
директива:
angular.module("app").directive("filesInput", function() {
return {
require: "ngModel",
link: function postLink(scope,elem,attrs,ngModel) {
elem.on("change", function(e) {
var files = elem[0].files;
ngModel.$setViewValue(files);
})
}
}
})
Приведенная выше директива добавляет прослушиватель изменений, который обновляет модель с помощью свойства files input
элемент.
Встроенная демонстрация files-input
директива
angular.module("app",[]);
angular.module("app").directive("filesInput", function() {
return {
require: "ngModel",
link: function postLink(scope,elem,attrs,ngModel) {
elem.on("change", function(e) {
var files = elem[0].files;
ngModel.$setViewValue(files);
})
}
}
});
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="app">
<h1>AngularJS Input `type=file` Demo</h1>
<input type="file" files-input ng-model="fileArray" multiple>
<h2>Files</h2>
<div ng-repeat="file in fileArray">
{{file.name}}
</div>
</body>