2016-03-12 2 views
0

У меня есть рабочий код для хранения изображения в памяти перед публикацией в API. Однако это может занять некоторое время, чтобы загрузить этот файл в память. Мне нужен способ показать, что файл загружается.Как показать файл загружается?

У меня есть значок spinner, который можно показать с помощью ng-show, но у меня нет ничего, что я могу установить для ng-show. Пока что я ничего не нашел, это простое решение. Есть ли HTML5 или угловой способ сделать это, не будучи слишком сложным?

HTML:

<input class="input-dnld" id="loadImg" type='file' placeholder="Select an image to upload" name="topoImg" onchange="angular.element(this).scope().readimg(this)" accept="image/*" required> 
<label for="loadImg" required><span class="glyphicon glyphicon-open glyph-style"></span>Select an image to upload</label> 

JS:

$scope.readimg = function(ele) { 
    $scope.image = ele.files[0]; 
} 
+0

Рискуя разговор о том, очевидном, вы не можете установить переменный в начале 'readImg' и изменить значение, прежде чем выйти? – Casey

ответ

-1

Вы можете использовать объект FileReader (используя свой комментарий, с незначительными изменениями):

$scope.readimg = function(ele) { 
    var r = new FileReader(); 
    r.onloadend = function (e) { 
     $scope.image = e.target.result; 
     ele.imgupload = false; 
    } 
    ele.imgupload = true; 
    r.readAsArrayBuffer(ele.files[0]); 
} 

Больше об объекте FileReader : https://developer.mozilla.org/en-US/docs/Web/API/FileReader

+0

Я пробовал это. Я перегрузил функцию onload. Хотя это еще продолжало загружаться, оно быстро установило переменную, не загрузив весь файл. Я потрачу еще некоторое время, изучая его позже. '$ scope.readimg = function (ele) { var r = new FileReader(); r.onload = function (e) { $ scope.image = e.target.result; ele.imgupload = false; } ele.imgupload = true; r.readAsArrayBuffer (ele.files [0]); } ' – xsdf

+0

как насчет r.onloadend? если все сбой, я бы установил $ interval для checkin FileReader.readyState. надеюсь, что этого не произойдет:] – raszpi

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/11600171) –

0

Я понял. Дело не в том, что код в readimg не запускался или флаги, которые я добавил позже, не были установлены, а скорее, что привязки не обновлялись до тех пор, пока они не вернутся.

Вот мое быстрое решение:

$scope.readimg = function(ele) { 
    $scope.imgupload = true; 
    $scope.$apply() 
    $scope.image = ele.files[0]; 
    $scope.imgupload = false; 
    $scope.$apply() 
} 
Смежные вопросы