@kiranananda

V-for и связь с индексами массива?

Добрый день.
Пишу код мульти загрузки картинок. Картинки грузятся все хорошо, но есть один момент. Новые картинки должны появляться в начале списка, соответсвенно я вставляю их в начало массива. И мне как то надо после окончания загрузки картинки, присвоить результат полученный с сервера(миниатюрка там и прочее), за место базового элемента что я добавляю через скрипт в unshift.
Код закоминчен с Vue.set он работал, но я не знаю как сохранить индекс элемента ибо в момент загрузки картинок пользователь можно еще добавить загрузку и все индексы поедут, а так же может удалить какой то элемент. Вот как правильно реализовать такую схему?

Как щас сделано fileInArr = response.data не работает, но оно и понятно там в доке написано что работать не будет.
uploadFiles: function ()
            {
                var files = this.$refs.upload.files;
                //выходим если пусто
                if(files[0] === undefined){
                    return;
                }
                //выводим файлы для загрузки.
                for (var i  = files.length - 1; i >= 0; i--) {
                    this.files.unshift({progress: 0, orig_name: files[i]['name']});
                    this.putFile(files[i], this.files[0]);
                }
            },

            putFile: function(file, fileInArr)
            {
                var files = this.$refs.upload.files;
                
                var data = new FormData();
                data.append('file', file);

                var config = {
                    onUploadProgress: (progressEvent) => {
                        fileInArr['progress'] = 
                        Math.round( (progressEvent.loaded * 100) / progressEvent.total );
                    }
                }
                axios.post(this.params['upload-url'], data, config)
                    .then( (response) => {
                        fileInArr = response.data;
                        //Vue.set(this.files, fiieId, response.data);
                    });  
            },
  • Вопрос задан
  • 470 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
У вас же есть объект, который вы хотите перезаписать - можно просто найти его индекс в массиве:

const fileIndex = this.files.indexOf(fileInArr);
this.$set(this.files, fileIndex, response.data);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы