【问题标题】:Failed to set an indexed property on 'FileList': Index property setter is not supported.v无法在“FileList”上设置索引属性:不支持索引属性设置器。v
【发布时间】:2018-03-14 15:02:52
【问题描述】:
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);
                    });
                });
            }
        };
    }]);

如何在这个变量中设置响应?

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

它适用于 safari 或旧版 chrome。但在新的 chrome 中不支持..

【问题讨论】:

    标签: javascript angularjs filelist


    【解决方案1】:

    Chrome 和 Firefox 现在都不允许在 NodeList 和 FileList 上设置新索引。我怀疑这与最近的变化有关,以使这些“类似数组”的结构在一般情况下与 JavaScript 更兼容,并且是浏览器前进的总体方向。

    在非严格模式下运行会恢复行为,但在转译的 JavaScript 环境中是不可行的 - 或者可能是可取的。

    最好的选择是使用 const files = Array.from(element[0].files) 或仅使用 const files = [...element[0].files] 将 FileList 转换为数组(取决于您支持的浏览器和您使用的转译)。

    【讨论】:

      猜你喜欢
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 2021-12-29
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      相关资源
      最近更新 更多