プロジェクトでfirebase.storage()にアクセスしようとしています。
私はこれを見つけました ソリューション 、そして.component.tsファイルを作成しました:
import { Component } from '@angular/core';
declare var firebase : any;
@Component({
template: '<img [src]="image">'
})
export class RecipesComponent {
image: string;
constructor() {
const storageRef = firebase.storage().ref().child('images/image.png');
storageRef.getDownloadURL().then(url => this.image = url);
}
}
ブラウザコンソールに次のエラーが表示されます。
EXCEPTION: Error: Uncaught (in promise): EXCEPTION: Error in ./bstorageComponent class FBStorageComponent_Host - inline template:0:0
ORIGINAL EXCEPTION: Error: No Firebase App '[DEFAULT]' has been created - call Firebase App.initializeApp().
ORIGINAL STACKTRACE:
Error: No Firebase App '[DEFAULT]' has been created - call Firebase App.initializeApp().
しかし、私はこのインポートでapp.module.tsのfirebaseを初期化しました
AngularFireModule.initializeApp(firebaseConfig)
不足しているものを取得していません。 firebaseを使用してストレージにアクセスするにはどうすればよいですか? anglefire2でデータベースにアクセスしても問題ありません。
ありがとう
内部的に、AngularFire2はinitializeApp
を作成するときにDIファクトリーでFirebaseのFirebaseApp
を呼び出します。
グローバルfirebase
インスタンスにアクセスしており、initializeApp
がまだ呼び出されていないため、DIインフラストラクチャはFirebaseApp
またはそのいずれかを作成する必要がないため、エラーが表示されます。依存関係。
グローバルfirebase
を使用する代わりに、FirebaseApp
(FirebaseのinitializeApp
関数によって返される値)を挿入できます。
import { Component, Inject } from '@angular/core';
import { FirebaseApp } from 'angularfire2';
@Component({
template: '<img [src]="image">'
})
export class RecipesComponent {
image: string;
constructor(@Inject(FirebaseApp) firebaseApp: any) {
const storageRef = firebaseApp.storage().ref().child('images/image.png');
storageRef.getDownloadURL().then(url => this.image = url);
}
}
また、不要になったため、declare var firebase : any;
を削除できます。
Firebase NPMモジュールの初期バージョンには、入力が含まれていませんでした。最近のバージョンにはそれらが含まれているため、firebaseApp
プロパティは次のように強く入力できます。
import { Component, Inject } from '@angular/core';
import { FirebaseApp } from 'angularfire2';
import * as firebase from 'firebase';
@Component({
template: '<img [src]="image">'
})
export class RecipesComponent {
image: string;
constructor(@Inject(FirebaseApp) firebaseApp: firebase.app.App) {
const storageRef = firebaseApp.storage().ref().child('images/image.png');
storageRef.getDownloadURL().then(url => this.image = url);
}
}
AngularFire2の バージョン4リリース候補 に伴うリファクタリングにより、FirebaseApp
はトークンではなくなったため、インジェクションを簡略化できます。
import { Component, Inject } from '@angular/core';
import { FirebaseApp } from 'angularfire2';
import 'firebase/storage';
@Component({
template: '<img [src]="image">'
})
export class RecipesComponent {
image: string;
constructor(firebaseApp: FirebaseApp) {
const storageRef = firebaseApp.storage().ref().child('images/image.png');
storageRef.getDownloadURL().then(url => this.image = url);
}
}
ただし、AngularFire2は使用するFirebase APIの部分のみをインポートするようになったため、firebase/storage
の明示的なインポートが必要です。 ( ストレージサポート の提案があることに注意してください。)
上記のコードは機能しなくなりました。「firebase.storageは関数ではありません」と表示されるので、次のコードを追加してみてください。
import * as firebase from 'firebase/app';
import 'firebase/storage';