0

我遇到了一些獨特的問題,我一直在試圖解決它。AngularFire2在iOS瀏覽器中導致無限循環

我有一個Angular2應用程序使用WebPack和AngularFire2來操作元數據。我正在處理的當前功能是能夠將文件上傳到Firebase存儲,獲取該位置的URL,然後將該URL附加到文件上傳到的對象的元數據,供用戶查看是否需要。這在所有桌面和Android瀏覽器中都可以使用,但在幾乎所有iOS瀏覽器(在Safari,Chrome,Firefox上測試,所有相同的結果)上都失敗,並且出現0個控制檯或系統錯誤,只是拒絕在該網站上執行任何操作,無法重新加載,無法做任何事情,但強制關閉標籤或瀏覽器應用程序並重新加載。

這裏是我的代碼崩潰:

這是通過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並傳遞Firebase對象密鑰(位於FirebaseListObservable中)後,我按如下方式更新列表:

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

據我瞭解故障發生的任何地方我操縱items列表或獲取快照文件上傳後,當地this.items。當我嘗試更新,推送或刪除該移動網站中的任何對象時,移動網站停止工作並陷入一些無限循環。

必須要有一些特殊情況我沒有考慮到或者有些誤用了iOS對我不滿意的Firebase對象。

任何幫助都是值得讚賞的,我似乎無法找到任何解決方案,但不使用Firebase。

UPDATE

劈砍而去它的另一天之後,我發現,火力點,在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對象。通過從輸入HTML標記開始的函數對迭代對象執行的任何Firebase操作都會使網站停滯不前。最後,我只需要執行兩個步驟的過程,一個是將文件上傳到內存中,另一個是將其上傳並更新Firebase對象。

娛樂時光。