angular - 未捕获(承诺中):TypeError: firebase_compat_app__WEBPACK_IMPORTED_MODULE_1__.default.storage is not a function
问题描述
我是初学者...我尝试创建对我的 firebase 数据库的引用以合并照片,但我知道最近 firebase 已经改变了他们的做法。我已阅读此文档:https ://firebase.google.com/docs/storage/web/create-reference#web-version-9但我不知道如何在我的情况下使用它......有人可以在 upLoadFile 方法中帮我解决这个问题?非常感谢您的帮助 !!
这是我的 service.ts:
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs-compat';
import { Book } from '../models/book.model';
import firebase from 'firebase/compat/app';
import { getStorage, ref } from "firebase/storage";
import "firebase/compat/database";
@Injectable({
providedIn: 'root'
})
export class BooksService {
books: Book[] = [];
booksSubject = new Subject<Book[]>();
constructor() { }
emitBooks() {
this.booksSubject.next(this.books);
}
saveBooks() {
firebase.database().ref('/books').set(this.books);
}
getBooks() {
firebase.database().ref('/books')
.on('value', (data) => {
this.books = data.val() ? data.val() : [];
this.emitBooks();
});
}
getSingleBook(id: number) {
return new Promise(
(resolve, reject) => {
firebase.database().ref('/books/' + id).once('value').then(
(data) => {
resolve(data.val());
}, (error) => {
reject(error);
}
)
}
)
}
createNewBook(newBook: Book) {
this.books.push(newBook);
this.saveBooks();
this.emitBooks();
}
removeBook(book: Book) {
const bookIndexToRemove = this.books.findIndex(
(bookEl) => {
if(bookEl === book) {
return true;
} else {
return ' ';
}
}
);
this.books.splice(bookIndexToRemove, 1);
this.saveBooks();
this.emitBooks();
}
uploadFile(file: File) {
return new Promise(
(resolve,reject) => {
const almostUniqueFileName = Date.now().toString();
**const upload = firebase.storage().ref()
.child('images/' + almostUniqueFileName + file.name)
.put(file);**
upload.on(firebase.storage.TaskEvent.STATE_CHANGED,
() => {
console.log('chargement...');
},
(error) => {
console.log('Erreur ma couillasse :' + error);
reject();
},
() => {
resolve(upload.snapshot.ref.getDownloadURL());
}
);
}
);
}
}
解决方案
您似乎使用的是旧的名称间隔语法,但使用新的模块化/功能语法导入 Firebase 存储。
// Change this
import { getStorage, ref } from "firebase/storage";
// To this
import "firebase/compat/storage"
我建议您查看新的模块化 SDK并升级到它。另请查看此 Firecast以了解有关新 SDK 的更多信息。
推荐阅读
- python - Python 新手,我在 Jupyter 中编写了我的脚本,但它似乎在 pycharm 中不起作用?
- bash - 编辑 .mk 文件中的行
- android - 我可以通过蜂窝数据重定向所有 Firebase 呼叫吗
- r - 允许绑定表中的重复名称
- python - plpython3u Docker Postgres 安装 3rd
- azure-data-factory - 如何使用 regexExtract() 在数据流中提取指定值
- javascript - 页面刷新后如何显示更新的localStorage数据?
- javascript - json对象列表使用角度js中的id列排序
- c# - 如果我的上下文已释放,在收到来自 Azure 服务总线侦听器/消费者的消息后,如何使用 EF Core?
- python - Python TypeError: 'float' object is not iterable