एनजी-फाइल-अपलोड (https://github.com/danialfarid/ng-file-upload) के लिए नमूना उपयोग कोड युक्त अधिकांश फ़िड्स में (http://jsfiddle.net/danialfarid/maqbzv15/1118/) की तरह, अपलोड प्रतिक्रिया कॉलबैक फ़ंक्शन $timeout
सेवा कॉल में अपना कोड लपेटते हैं, लेकिन इन कॉलों में कोई देरी नहीं होती है पैरामीटर के लिए $timeout
(https://docs.angularjs.org/api/ng/service/ $ का समय समाप्त) संकेत मिलता है कि देरी वैकल्पिक है, लेकिन तुम क्यों $timeout
करने के लिए एक कॉल करने के लिए नहीं तो कोड जा रहा रन देरी करने के लिए चाहते हो जाएगा में पारित कर दिया।
Angular.js डॉक्स। निम्नलिखित के बजाय दूसरे शब्दों में, क्यों नहीं एक के बाद:
//inject angular file upload directives and services.
var app = angular.module('fileUpload', ['ngFileUpload']);
app.controller('MyCtrl', ['$scope', 'Upload', '$timeout', function ($scope, Upload, $timeout) {
$scope.uploadPic = function(file) {
file.upload = Upload.upload({
url: 'https://angular-file-upload-cors-srv.appspot.com/upload',
data: {username: $scope.username, file: file},
});
file.upload.then(function (response) {
$timeout(function() {
file.result = response.data;
});
}, function (response) {
if (response.status > 0)
$scope.errorMsg = response.status + ': ' + response.data;
}, function (evt) {
// Math.min is to fix IE which reports 200% sometimes
file.progress = Math.min(100, parseInt(100.0 * evt.loaded/evt.total));
});
}
}]);
वहाँ इन सभी उदाहरणों में $timeout
आवरण के लिए किसी भी कारण है? चाहेंगे उसके स्थान पर निम्नलिखित file.upload कॉल काम ?:
file.upload.then(function (response) {
file.result = response.data;
}, function (response) {
if (response.status > 0)
$scope.errorMsg = response.status + ': ' + response.data;
}, function (evt) {
// Math.min is to fix IE which reports 200% sometimes
file.progress = Math.min(100, parseInt(100.0 * evt.loaded/evt.total));
});
संपादित करें: मैं देख सकता हूँ यह $timeout
आवरण के बिना चलाने के लिए प्रतीत होता है कि है, लेकिन तथ्य यह है कि यह सब उदाहरण में शामिल है मुझे लगता है कि यह जानबूझकर है बनाता है, जिसका अर्थ है कि यहां एक सुरक्षा/मजबूती/ब्राउज़र संगतता एज केस है जो मुझे समझ में नहीं आता है।
इस उत्तर के लिए धन्यवाद। हालांकि, जैसा कि ओपी ने स्पष्ट रूप से उल्लेख किया था, "यह $ टाइमआउट रैपर के बिना चल रहा है"। क्या आप कुछ प्रकाश डाल सकते हैं कि यह अभी भी '$ टाइमआउट' रैपर के बिना क्यों काम करता है? – rinogo
इसके अलावा, आपकी ज़रूरतों के आधार पर, आप '$ टाइमआउट' के बजाय '$ scope। $ EvalAsync()' का उपयोग करने पर विचार कर सकते हैं। स्रोत: https://www.bennadel.com/blog/2605-scope-evalasync-vs-timeout-in-angularjs.htm – rinogo
@rinogo मैं केवल कल्पना कर सकता हूं कि कहीं और कोड का एक टुकड़ा पाचन चक्र शुरू कर रहा है। एक पाचन शुरू होने तक कोणीय को '$ स्कोप' में परिवर्तनों के बारे में जागरूक होना असंभव है। – maddockst