2017-02-21 19 views
0

Я использую нг-если в интерфейсе, как это:

div class="flex-row flex-space-around image-preview-panel" ng-if="files" /* Some Code */ div

Это не работает, как ожидалось, потому что $ сфера не обновляется в момент вызов функции из-за вызова этой функции:

angular.module("mainController", []) 

.controller("mainCtrl", function($scope, $state) { 
    var vm = this; 

    $scope.files = []; 

    vm.showThumbnails = function() { 
     for(var i=0;i<event.target.files.length;i++) { 
      (function(i, file) { 
       var reader = new FileReader(); 
       reader.readAsDataURL(file); 
       reader.onload = function(e) { 
        $scope.$apply(function() { 
         $scope.files[$scope.files.length] = file; 
        }) 
       } 
      })(i, event.target.files[i]); 
     } 
    } 
}) 

Любой способ решить эту проблему?

+0

Извините, но вы уверены в этой строке? .. что не выведете ошибку? .. $ scope.files [$ scope.files.length] = файл; .. как $ scope.files может иметь lentgh, если это пустой массив? –

+0

Да, это прекрасно. Поскольку я уже объявлял его массивом, его внутренний размер равен 0. –

+0

Вы уверены, что файл читается успешно? Если FileReader получает ошибку, он не может вызывать обратный вызов 'onload'. – Duncan

ответ

0

Я думаю, проблема в том, что $scope.files инициализируется массивом, поэтому ng-if="files" всегда истинно (в javascript пустой массив правдивый). Условие должно быть ng-if="files.length > 0"

+0

ng-if = "files.length> 0" работает. Если его «правда», почему это не было видно все время и просто работало, когда я обновлял условие? –

+0

Да, я тоже подумал. Это может зависеть от того, что у вас есть в '/ * некотором коде * /'. Возможно, он рисовался один раз, когда 'files' пуст, но не перерисовывается, когда вы добавляете файлы, потому что выражение в' ng-if' не изменилось, поэтому не нужно было снова смотреть на него. Но если у вас есть что-то в блоке, зависящее от содержимого 'files', которое должно перерисовываться в любом случае. – Duncan

+0

Кажется, что это разумная вещь. Спасибо. –