W większości skrzypiec zawierających przykładowy kod użycia dla przesłania pliku ng (https://github.com/danialfarid/ng-file-upload), takiego jak ten w (http://jsfiddle.net/danialfarid/maqbzv15/1118/), funkcje wywołania zwrotnego przesyłania umieszczają swój kod w rozmowie serwisowej $timeout
, ale połączenia te nie mają żadnego opóźnienia parametr przekazany.
The angularjs docs dla $timeout
(https://docs.angularjs.org/api/ng/service/ $ timeout) wskazują, że opóźnienie nie jest obowiązkowe, ale dlaczego chcesz, aby wykonać połączenie do $timeout
jeśli nie opóźniać prowadzony kodu. Innymi słowy, zamiast z następujących, to dlaczego nie zrobić jeden po:
//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));
});
}
}]);
Czy jest jakiś powód, dla $timeout
owijki we wszystkich tych przykładach? Czy następujące file.upload praca wezwanie na swoim miejscu ?:
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));
});
EDIT: widzę, że wydaje się działać bez $timeout
owijki, ale faktem jest to zawarte we wszystkich przykładach sprawia, że myślę, że to celowe, co prawdopodobnie oznacza, że nie ma tu sprawy dotyczącej bezpieczeństwa/odporności/zgodności krawędzi przeglądarki.
Dziękuję za tę odpowiedź. Jednak, jak wyraźnie wspomniał PO, "wydaje się działać bez opakowania $ timeout". Czy możesz rzucić nieco światła na to, dlaczego wciąż działa bez opakowania $ $ timeout? – rinogo
Ponadto, w zależności od potrzeb, można rozważyć użycie '$ scope. $ EvalAsync()' zamiast '$ timeout'. Źródło: https://www.bennadel.com/blog/2605-scope-evalasync-vs-timeout-in-angularjs.htm – rinogo
@rinogo Mogę sobie tylko wyobrazić, że fragment kodu gdzie indziej rozpoczyna cykl trawienia. Nie jest możliwe, aby kątowe uświadomiły sobie zmiany w '$ scope', o ile nie rozpoczęto syntezy. – maddockst