আপনি কিছু একটু বেশি মার্জিত / ইন্টিগ্রেটেড চান, আপনি একটি ব্যবহার করতে পারেন প্রসাধক প্রসারিত করতে input
সমর্থন সহ নির্দেশ type=file
। মনে রাখার মূল সতর্কতা হ'ল এই পদ্ধতি আইআই 9 তে কাজ করবে না যেহেতু আই 99 ফাইল এপিআই প্রয়োগ করে নি । এক্সএইচআর এর মাধ্যমে নির্বিশেষে বাইনারি ডেটা আপলোড করতে জাভাস্ক্রিপ্ট ব্যবহার করা স্থানীয়ভাবে আই 99 বা তার আগের ক্ষেত্রে সম্ভব নয় ( ActiveXObject
অ্যাক্টিভএক্স ব্যবহার করা কেবল সুরক্ষা সমস্যার জন্য জিজ্ঞাসা করছে বলে স্থানীয় ফাইল সিস্টেমে অ্যাক্সেসের ব্যবহার গণনা করা হয় না)।
এই সঠিক পদ্ধতিতে অ্যাংুলার জেএস 1.4.x বা তার পরেও প্রয়োজন হয় তবে আপনি এটির $provide.decorator
পরিবর্তে এটি ব্যবহার করতে সক্ষম হতে পারেন - জন পপির অ্যাঙ্গুলারজেএস স্টাইল গাইডের সাথে সামঞ্জস্য রেখে কীভাবে এটি করা যায় তা প্রদর্শন করার জন্য angular.Module.decorator
আমি এই সূচকটি লিখেছিলাম :
(function() {
'use strict';
/**
* @ngdoc input
* @name input[file]
*
* @description
* Adds very basic support for ngModel to `input[type=file]` fields.
*
* Requires AngularJS 1.4.x or later. Does not support Internet Explorer 9 - the browser's
* implementation of `HTMLInputElement` must have a `files` property for file inputs.
*
* @param {string} ngModel
* Assignable AngularJS expression to data-bind to. The data-bound object will be an instance
* of {@link https://developer.mozilla.org/en-US/docs/Web/API/FileList `FileList`}.
* @param {string=} name Property name of the form under which the control is published.
* @param {string=} ngChange
* AngularJS expression to be executed when input changes due to user interaction with the
* input element.
*/
angular
.module('yourModuleNameHere')
.decorator('inputDirective', myInputFileDecorator);
myInputFileDecorator.$inject = ['$delegate', '$browser', '$sniffer', '$filter', '$parse'];
function myInputFileDecorator($delegate, $browser, $sniffer, $filter, $parse) {
var inputDirective = $delegate[0],
preLink = inputDirective.link.pre;
inputDirective.link.pre = function (scope, element, attr, ctrl) {
if (ctrl[0]) {
if (angular.lowercase(attr.type) === 'file') {
fileInputType(
scope, element, attr, ctrl[0], $sniffer, $browser, $filter, $parse);
} else {
preLink.apply(this, arguments);
}
}
};
return $delegate;
}
function fileInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) {
element.on('change', function (ev) {
if (angular.isDefined(element[0].files)) {
ctrl.$setViewValue(element[0].files, ev && ev.type);
}
})
ctrl.$isEmpty = function (value) {
return !value || value.length === 0;
};
}
})();
কেন এটি প্রথম স্থানে করা হয়নি? AngularJS সমর্থনটি কেবল IE9 এর মতো পিছনে পৌঁছানোর উদ্দেশ্যে। যদি আপনি এই সিদ্ধান্তের সাথে একমত নন এবং মনে করেন যে এগুলি যেভাবেই করা উচিত ছিল, তবে ওয়েগনটি অ্যাংুলার 2+ এ ঝাঁপুন কারণ আরও ভাল আধুনিক সমর্থন আক্ষরিক অর্থে কেন কৌনিক 2 বিদ্যমান exists
বিষয়টি হ'ল (যেমনটি আগেই উল্লেখ করা হয়েছিল) যে ফাইল এপিআই সমর্থন না করে সঠিকভাবে এটি করা আমাদের বেসলাইন আইই 9 হ'ল এবং এই উপাদানটিকে পলিফিলিং দেওয়া কোরটির পক্ষে প্রশ্নের বাইরে নয় given
অতিরিক্তভাবে এই ইনপুটটিকে এমনভাবে পরিচালনা করার চেষ্টা করা হয়েছে যা ক্রস ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ নয় কেবল তৃতীয় পক্ষের সমাধানের জন্য এটি আরও শক্ত করে তোলে, এখন মূল সমাধানটি লড়াই / অক্ষম / কার্যক্ষম করতে হবে।
...
আমরা # 1236 বন্ধ করার সাথে সাথে এটি বন্ধ করতে যাচ্ছি। কৌনিক 2 আধুনিক ব্রাউজারগুলিকে সমর্থন করার জন্য তৈরি হচ্ছে এবং সেই ফাইলটির সাহায্যে সহজেই উপলব্ধ হবে।