2017-10-03 10 views
4
angular.module('myApp') 
    .directive('fileModel', ['$parse', 'uploadService','messageService','CONF', function ($parse, uploadService,messageService,CONF) { 
     return { 
      restrict: 'A', 
      link: function (scope, element, attrs) { 
       var model = $parse(attrs.fileModel); 
       var modelSetter = model.assign; 
       element.bind('change', function() { 

        var file = element[0].files[0]; 

        var fd = new FormData(); 
        fd.append('file', file); 
        console.log(fd) 

        self.isDisabled = true; 


         ParkingService.uploadImage(fd).then(
          function (response) { 
           response = JSON.parse(response); 
           element[0].files[1] = response; 
           console.log(response) 
            if (response.message !== 'ERROR') { 
             // self.image = response.result; 
              messageService.toasterMessage(CONF.TOASTER_TOP_RIGHT,CONF.TOASTER_SUCCESS,"Success Upload File"); 
            } 
            else { 
             messageService.toasterMessage(CONF.TOASTER_TOP_RIGHT,CONF.TOASTER_ERROR,response.result); 

            } 
           } 
         ); 

        scope.$apply(function() { 
         modelSetter(scope, element[0].files); 
        }); 
       }); 
      } 
     }; 
    }]); 

이 변수에 응답을 설정하는 방법은 무엇입니까?'FileList'에 색인 된 속성을 설정하지 못했습니다. 색인 속성 설정자가 지원되지 않습니다 .v

element[0].files[1] = response; 

사파리 또는 구형 크롬에서 작동합니다. 새로운 크롬에서는 지원되지 않습니다.

답변

0

이제 Chrome과 Firefox 모두 NodeList 및 FileList에 새 색인을 설정할 수 없습니다. 필자는 이것이 최근의 변화와 관련이 있다고 생각합니다. 이러한 "배열과 같은"구조는 일반적으로 JavaScript와 호환되며 브라우저가 향하는 일반적인 방향입니다.

비 엄격 모드에서 실행하면 비헤이비어가 되돌려 지지만 변환 된 JavaScript 환경에서는 실행 가능하지 않거나 바람직 할 수 있습니다.

가장 좋은 옵션은 FileList를 const files = Array.from(element[0].files) 또는 단지 const files = [...element[0].files]을 사용하는 배열로 변환하는 것입니다 (지원하는 브라우저 및 사용중인 변환에 따라 다름).