Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将$getDownloadURL()promise与ng repeat Angularjs 1.6一起使用_Angularjs_Firebase_Angularjs Ng Repeat_Firebase Storage - Fatal编程技术网

如何将$getDownloadURL()promise与ng repeat Angularjs 1.6一起使用

如何将$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()的承诺吗 我的代

我正在建造一个水疗中心,我正在使用Angularjs 1.6和firebase(数据库和存储)

我想在我的html页面上使用firebase存储中的图像。
为了实现这一点 我正在使用一个指令,它在某些页面上运行良好,但如果我使用
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>