0

У меня есть немного уникальная проблема, и я схожу с ума, пытаясь ее решить.AngularFire2 вызывает бесконечные циклы в iOS-браузерах

У меня есть приложение Angular2 с помощью WebPack с AngularFire2 для управления метаданными. Текущая функция, над которой я работаю, - это возможность загрузить файл в хранилище Firebase, получить URL-адрес для этого местоположения, а затем привязать этот url к метаданным объекта, который был загружен для пользователя, чтобы пользователь мог его просмотреть, если захотите. Это работает так же, как и во всех браузерах для настольных компьютеров и Android, но не работает почти во всех браузерах iOS (проверенных на Safari, Chrome, Firefox, все те же результаты) с 0 консольными или системными ошибками, просто отказывается от каких-либо действий на сайте, не может перезагружать, не в состоянии ничего сделать, кроме как закрыть вкладку или приложение браузера и перезагрузить.

Вот разбивка моего кода:

Это HTML, что петли через FirebaseListObservable и отображает данные в окне:

<div *ngFor="let item of items | async"> 
    <input type="file" name="file" id="{{ item.$key }}" class="inputfile" (change)="uploadPicture($event, item)"/> 
    <label [attr.for]="item.$key">{{item.name}}</label> 
    <img *ngIf="item.fileUrl" src="../../assets/img/star.png" class="cell-img" (click)=showImg(item.fileUrl)> 
</div> 

загрузка файла:

firebase.storage().ref().child('images/' + filename).put(file, metadata).then(snapshot => this.obtainUploadUrl(snapshot, key, filename)); 

Получив URL-адрес местоположения файла и передав ключ объекта firebase (который находится в FirebaseListObservable), я обновляю список следующим образом:

console.log("Updating", key, "With", data); 
this.af.database.list('/games/' + this.currentGame.$key + '/items').update(key, data); 

Насколько мне известно, происходит сбой в любом месте я манипулировать items список или локальный this.items после получения снимка для загрузки файла. Когда я пытаюсь обновить, нажать или удалить любой объект в этом FirebaseListObservable, мобильный сайт перестает работать и застревает в бесконечном цикле.

Должен быть какой-то специальный случай, который я не учитываю или не злоупотребляю объектами Firebase, которые iOS мне не нравится.

Любая помощь вообще оценена, я не могу найти решение, но не использовать Firebase.

UPDATE

После очередного дня рубил на него, я обнаружил, что firebase, внутри браузера IOS, не любит обновляемые элементы просмотра в течение, по меньшей мере, функцию ввода мыши.

<input type="file" name="file" id="{{ item.$key }}" class="inputfile" (change)="uploadPicture($event, item, items)"/> 

Внутри этой функции uploadPicture, если я запускаю две строки кода:

firebase.storage().ref().child('images/' + filename).put(file, metadata).then(snapshot => console.log("File uploaded!", snapshot)); 
this.items.update(key, {fileName: filename}); 

я получаю ту же ошибку в IOS. Однако, если я попытаюсь изменить любой другой объект firebase, он не будет зависеть от меня. Тем не менее, я не знаю, почему это происходит только для iOS сейчас, но я до сих пор не знаю, как решить эту проблему вообще.

ответ

0

В конце концов, проблема заключалась в том, что iOS отказалась предоставить мне файл и изменить объект firebase с помощью той же функции. Любое действие firebase, выполняемое на итерированных объектах с помощью функции, начинающейся с входного тега HTML, остановит сайт. В конце концов мне просто нужно было выполнить двухэтапный процесс, в котором я поставил файл и загрузил его в память, а второй этап - загрузить его и обновить объекты firebase.

Веселые времена.