2016-08-26 14 views
8

मैं अपलोड की गई फ़ाइल का पता लगाने और फ़ंक्शन को ट्रिगर करने के लिए कोणीय 2 (परिवर्तन) का उपयोग कर रहा हूं। लेकिन जब मैं एक ही फाइल को फिर से अपलोड करने का प्रयास करता हूं, तो मुझे समस्या का सामना करना पड़ रहा है, क्योंकि फ़ाइल में कोई बदलाव नहीं है, (परिवर्तन) ट्रिगर नहीं किया गया है। कृपया इस मामले में बाध्यकारी घटना का सुझाव दें।कोणीय 2 (परिवर्तन)

<input type="file" name="file" id="fileupload" (change)="onChange($event)"/> 

क्या फ़ाइल फ़ाइल के इनपुट मान को खाली करने का कोई तरीका है।

उत्तर

14

आप फ़ाइल इनपुट को ViewChild के रूप में एक्सेस कर सकते हैं और इससे फ़ाइलें प्राप्त कर सकते हैं।

import { Component, ViewChild, ElementRef} '@angular/core'; 
@Component({ 
//... 
template: ` 
    <input #fileInput type='file' (change)="fileChanged($event)"> 
` 
//... 
}) 
export class FileInputComponent { 
    @ViewChild('fileInput') myFileInput: ElementRef; 

    getFileLater() { 
    console.log(this.myFileInput.nativeElement.files[0]); 
    } 

    fileChanged(event) { 
    console.log(event.target.files[0]); 
    } 
} 

.files[] nativeElement पर हमेशा एक सरणी वहाँ (उस बात के लिए या बिल्कुल भी नहीं,) केवल एक फ़ाइल का चयन किया है, भले ही है। यह आपको फाइल ऑब्जेक्ट्स बिल्कुल ठीक करेगा जैसा कि आपने ईवेंट से event.target.files तक पहुंचाया था ताकि आप इस तथ्य के बाद जो चाहते हैं उसके साथ कर सकें।

यह उल्लेख किया जाना चाहिए कि जब फ़ाइल इनपुट पर फ़ाइल चुनी जाती है और परिवर्तन ईवेंट ट्रिगर होता है, तो फ़ाइल वास्तव में कहीं भी 'अपलोड' नहीं होती है। यह ब्राउज़र को इसके संदर्भ में संदर्भित करता है (कुछ अन्य मेटा डेटा के साथ) जो ग्राहक काम कर सकता है। असल में फ़ाइलों को अपलोड करना कुछ ऐसा है जो आपको अलग से प्रोग्राम करना है।

अद्यतन:

आदेश जब एक फ़ाइल है कि पहले चुना गया था, फ़ाइल इनपुट अपने मूल्य समाशोधन जब भी ब्राउज़ बटन है द्वारा रीसेट किया जा करने के लिए किया गया है चुनने परिवर्तन घटना भी आग की फ़ाइल इनपुट के लिए मजबूर करने में क्लिक किया। चूंकि आप पहले ही jQuery का उपयोग कर रहे हैं, आप ऐसा कर सकते हैं: $('#fileupload').val("");। एक कामकाजी उदाहरण के लिए

See my forked Plunker

+0

यदि मैं दूसरी बार उसी फ़ाइल को ब्राउज़र करता हूं क्योंकि तत्व में कुछ भी नहीं बदलता है (परिवर्तन) इसे कैसे पहचानता है। – Developer

+0

क्षमा करें, लेकिन मैं वास्तव में समझ नहीं पा रहा हूं कि आप क्या पूछ रहे हैं। परिवर्तन ईवेंट ** केवल ** आग लगती है जब उपयोगकर्ता फ़ाइल इनपुट का चयन/परिवर्तन करता है। यदि आप उस फ़ाइल को प्राप्त करना चाहते हैं जिसे फ़ाइल इनपुट में अलग-अलग ईवेंट इनपुट से चुना गया है, तो आपको फ़ाइल इनपुट तत्व की 'फ़ाइलें []' सरणी तक पहुंचनी होगी, जैसा कि मैंने अपने उदाहरण के 'getFileLater()' फ़ंक्शन में दिखाया है । – ABabin

+0

मैं परिवर्तन समारोह का उपयोग करके अपना फ़ंक्शन ट्रिगर करता हूं। मैं एक फाइल ब्राउज़ करता हूं, और फिर फ़ाइल के डेटा को बदलता हूं। जब मैं एक ही फ़ाइल को फिर से ब्राउज़ करता हूं तो फ़ंक्शन परिवर्तन ईवेंट द्वारा ट्रिगर नहीं किया जाएगा क्योंकि यह वही फ़ाइल है। – Developer

संबंधित मुद्दे