私はちょっとした問題を抱えています。私はそれを解決しようと夢中になっています。AngularFire2がiOSブラウザで無限ループを引き起こしています
メタデータを操作するためにAngularFire2でWebPackを使用するAngular2アプリがあります。現在取り組んでいるのは、ファイルをFirebase Storageにアップロードし、その場所のURLを取得し、そのURLをファイルがアップロードされたオブジェクトのメタデータに添付して、必要に応じて表示する機能です。これはすべてのデスクトップやアンドロイドブラウザではうまくいきますが、ほとんどのiOSブラウザ(Safari、Chrome、Firefox、すべて同じ結果)でコンソールやシステムエラーが発生しても失敗します。リロード、何もできないが強制的にタブやブラウザのアプリケーションを閉じてリロードする。
ここに私のコードの内訳です:
これはFirebaseListObservable
をループし、ビュー内のデータを表示するHTMLです:
<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を取得し、firebaseListObservableにあるfirebaseオブジェクトキーを渡した後、私は次のようにリストを更新します:
console.log("Updating", key, "With", data);
this.af.database.list('/games/' + this.currentGame.$key + '/items').update(key, data);
私の知る限りの失敗は、私は、ファイルのアップロードのためのスナップショットを取得した後items
リストまたはローカルthis.items
を操作どこでも起こります。 FirebaseListObservable
のオブジェクトを更新、プッシュ、または削除しようとすると、モバイルサイトが機能しなくなり、無限ループに陥ります。
iOSが使用していないFirebaseオブジェクトを考慮していないか、または誤って使用しているケースがいくつかあります。
私は何の解決策も見つけられないかもしれませんが、Firebaseを使用しないように助けてください。
UPDATE
それで離れてハッキングの別の日の後、私はfirebaseは、iOSのブラウザ内で、少なくとも、入力クリック機能、内ビュー項目の更新を好きではないことを見出しました。そのuploadPicture機能インサイド
<input type="file" name="file" id="{{ item.$key }}" class="inputfile" (change)="uploadPicture($event, item, items)"/>
私は2行のコード実行した場合、:
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だけではどうして失敗するのかまだ分かりませんが、この問題を解決する方法はまだありません。