私はSPAを構築していますが、Firebase(データベースとストレージ)でAngularjs 1.6を使用しています。
私はhtmlページ上にfirebase storageの画像を使用したいと思います。私はディレクティブを使用していますが、それはいくつかのページで正常に動作していますが、私はループにng-repeat
を使用して動的に firebaseストレージ上に保存された画像へのリンクを貼り付ける場合は、私が問題につまずく ことを達成するために
。
約束を得るために私は$getDownloadURL()
を使用していますが、しばらくしてから解決されますが、ページが既に読み込まれていて、私は崩壊してしまいます。
$getDownloadURL()
の約束を変更することはできますか?
マイコード:
angular.module('module', ['firebase']).controller('someCtrl', someCtrl).directive('firebaseSrc', FirebaseStorageDirective);
function FirebaseStorageDirective($firebaseStorage, firebase) {
return {
restrict: 'A',
priority: 99,
link: function (scope, element, attrs) {
attrs.$observe('firebaseSrc', function (newFirebaseSrcVal) {
if (newFirebaseSrcVal !== '') {
var storageRef = firebase.storage().ref(newFirebaseSrcVal);
var storage = $firebaseStorage(storageRef);
storage.$getDownloadURL().then(function getDownloadURL(url) {
element[0].src = url;
});
}
});
}
};
}
FirebaseStorageDirective.$inject = ['$firebaseStorage', 'firebase'];
<ul>
<li ng-repeat="item in items">
<img firebase-src="{{item.somePath}}" />
</li>
</ul>
、残念ながらそれは私のために動作しませんです、私は$スコープに$の時計を変更した場合、私はキャッチします。「にReferenceErrorを:$スコープが定義されていない」が、私は私のコード「スコープに追加した場合:true "私はエラーをキャッチします"エラー:[$ compile:multidir] " – Tropika
' scope。$ watch'を使用してください。 'スコープ'に '$ 'ドル記号なし。 – georgeawg
ありがとうございます!私はこの問題を解決し、ディレクティブを書き直しました。 – Tropika