У меня есть немного уникальная проблема, и я схожу с ума, пытаясь ее решить.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 сейчас, но я до сих пор не знаю, как решить эту проблему вообще.