2016-11-14 54 views
1

我对angularjs完全陌生,在这里我试图做的是从ng-repeat获取一个img id,并通过函数传递它并获取返回的图像字符串,但它显示了一些错误。请帮忙。ng-src in ng-repeat not updating

HTML

<tr data-ng-repeat="(key, list) in listOfProperties"> 
    <img ng-src="{{getImageUrl(key)}}"> 
</tr> 

JS

$scope.getImageUrl=function(key){ 

return factory.getImgUrl(key).then(function(data){ 
    return data 
}); 

} 

getImgUrl:function(key){ 
    return $http({ 

      method:"GET", 
      url:somedomain.com/getCoverPicture", 
      //This domain will return a image string. 
      params:{'key':key} 

     }).then(function(response){ 

      return response.data; 

     }) 

} 
+0

u能PLS下面添加 – byteC0de

+0

错误这是我收到angular.min.js:118错误:[$ rootScope:infdig] http://errors.angularjs.org/1.5.8/ $ rootScope/infdig?p0 = 10&p1 =%5B%5D –

回答

0

你getImgUrl函数不返回图像的URL。它返回一个承诺 HTTP响应,其正文包含(希望)一个URL。

ng-src预计URL。

此外,getImageUrl(key)由eclipse摘要循环中的Angular进行评估,并且您确实不希望每次运行摘要循环时都进行HTTP查询。因此,您需要事先获取图像URL(当控制器被实例化时,或者当您获取listOfProperties时),并将它们存储在对象中。假设你listOfProperties是一个数组,因为它应该是,而不是一个对象:

listOfProperties.forEach(function(property) { 
    factory.getImgUrl(property.key).then(function(response) { 
     property.imgUrl = response.data; 
    }); 
}); 

而在你的看法:

<tr data-ng-repeat="property in listOfProperties"> 
    <td><img ng-src="{{property.imgUrl}}" /></td> 
</tr> 

请阅读this article I wrote约角的承诺,因为你似乎错过一些重要关于他们的东西。

0

尝试这个

<tr ng-init="getImageUrl(key);" data-ng-repeat="(key, list) in listOfProperties"> 
     <img ng-src="{{list.url}}"> 
    </tr> 

$scope.getImageUrl = function(key, list){ 

    return factory.getImgUrl(key).then(function(data){ 
     list.url = data; 
    }); 
} 
+0

Thankz工作。 –