如何将$getDownloadURL()promise与ng repeat Angularjs 1.6一起使用
我正在建造一个水疗中心,我正在使用Angularjs 1.6和firebase(数据库和存储) 我想在我的html页面上使用firebase存储中的图像。如何将$getDownloadURL()promise与ng repeat Angularjs 1.6一起使用,angularjs,firebase,angularjs-ng-repeat,firebase-storage,Angularjs,Firebase,Angularjs Ng Repeat,Firebase Storage,我正在建造一个水疗中心,我正在使用Angularjs 1.6和firebase(数据库和存储) 我想在我的html页面上使用firebase存储中的图像。 为了实现这一点 我正在使用一个指令,它在某些页面上运行良好,但如果我使用ng repeat循环并动态粘贴链接到保存在 在firebase存储中,我无意中遇到了一个问题 我正在使用$getDownloadURL()获取一个待定的承诺,一段时间后它会解决,但页面已经加载,我遇到了崩溃 我可以更改$getDownloadURL()的承诺吗 我的代
为了实现这一点 我正在使用一个指令,它在某些页面上运行良好,但如果我使用
ng repeat
循环并动态粘贴链接到保存在
在firebase存储中,我无意中遇到了一个问题
我正在使用$getDownloadURL()
获取一个待定的承诺,一段时间后它会解决,但页面已经加载,我遇到了崩溃
我可以更改$getDownloadURL()
的承诺吗
我的代码:
angular.module('module',['firebase']).controller('someCtrl',someCtrl).directive('firebaseSrc',firebasestagedirective);
函数FirebaseStorageDirective($firebaseStorage,firebase){
返回{
限制:“A”,
优先权:99,
链接:函数(范围、元素、属性){
属性$observe('firebaseSrc',函数(newFirebaseSrcVal){
如果(newFireBaseScVal!=''){
var storageRef=firebase.storage().ref(newFirebaseSrcVal);
var存储=$firebaseStorage(storageRef);
存储。$getDownloadURL()。然后(函数getDownloadURL(url){
元素[0]。src=url;
});
}
});
}
};
}
FirebaseStorageDirective.$inject=['$firebaseStorage','firebase'];
-
使用attrs.$observe
时,指令属性需要使用{{}
插值来计算角度表达式:
link: function (scope, element, attrs) {
attrs.$observe('firebaseSrc', function (newFirebaseSrcVal) {
-
我有我的firebaseDB,我得到了json文件,其中item.path(html)是图片和项目的路径。图片[0]是文件夹路径中数组图片中图片的第一个名称
我的新模块
模块:
角度.module('myModule',['firebase']).directive('firebaseImage',FirebaseImageDirective);
指令:
函数FirebaseImageDirective($firebaseStorage,firebase){
返回{
限制:'E',
优先权:99,
作用域:{},
链接:功能(范围、要素、属性){
scope.descr=attrs['firemagealt'];
var myRef=attrs['fireImagePath'];
var storageRef=firebase.storage().ref(myRef);
var存储=$firebaseStorage(storageRef);
存储。$getDownloadURL()。然后(函数getDownloadURL(url){
scope.path=url;
});
},
模板:“”,
替换:正确
};
}
FirebaseImageDirective.$inject=['$firebaseStorage','firebase']代码>
-
不幸的是,如果我改为$scope,它对我不起作用。$watch I catch“ReferenceError:$scope未定义”,但如果我在代码中添加“scope:true”I catch error“error:[$compile:multidir]”,请使用scope.$watch
<代码>范围
不带$美元符号。谢谢!我解决了这个问题并重写了指令,我在下面添加的代码可能会有帮助,CheesFunction uploadImage(fileData,storagePath){var defer=$q.defer();var metadata={contentType:'image/jpeg,image/png',};var storageRef=firebase.storage().ref();var uploadTask=storageRef.child(storagePath+'/'+fileData.files[0].name).put(fileData.files[0],元数据);var tangRef=storageRef.child(storagePath+'/'+fileData.files[0].name);var urlData=tangRef.getDownloadURL().then(函数(url){defer.resolve(url);return defer.promise;}.catch(函数(错误){return defer.promise;});return urlData;}我没有使用指令,但问题完全相同。。你有结果吗?
<ul>
<li ng-repeat="item in items">
<img firebase-src="{{item.somePath}}" />
</li>
</ul>
link: function (scope, element, attrs) {
scope.$watch(attrs.firebaseSrc, function (newFirebaseSrcVal) {
<ul>
<li ng-repeat="item in items">
<img firebase-src="item.somePath" />
</li>
</ul>