【发布时间】:2014-03-21 00:24:13
【问题描述】:
我有一个函数可以对外部 API 进行 $http 调用,然后在 ng-repeat 数组中填充一些结果。
现在该函数会在 ng-repeat 上的每个元素上触发,这会创建大量服务器调用。我希望该函数仅在单击 ng-repeat 中的元素后才进行调用。
我尝试过使用 ng-click,但我想说我错过了一些东西。
我试图在点击时调用的 $http 查询是第二个:
function ImageCtrl($scope, $http) {
$scope.image = 'img/record-default.png';
$http.get('http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=e8aefa857fc74255570c1ee62b01cdba&artist=' + $scope.artist.name + '&album=' + $scope.release.title + '&format=json').
success(function (data4) {
$scope.image = data4.album.image[2]['#text'];
}
)
function getVersions ($scope, $http){
$http.get('http://api.discogs.com/masters/' + $scope.release.id + '/versions').
success(function (data5) {
$scope.versions = data5.versions;
});
}
}
以及相关的html:
<div class="col-md-3" ng-controller="ImageCtrl" ng-repeat="release in releases | filter:album | filter:year | filter:{ role: \'main\' }" >
<div class="release" ng-click="getVersions()"> \
<img class="img-responsive" ng-src="{{image}}" /> {{release.title}}
<ul ng-controller="ImageCtrl">
<li ng-repeat="version in versions">{{version.format}}</li>
</ul>
</div>
</div>
还有一个working Plunker。有问题的函数是 script.js 上的第 60 行
【问题讨论】:
-
可能是我理解错了问题。为什么不直接将 ng-click='getVersions()' 移动到 li?
-
Plunkr 完成了吗?看起来你甚至没有注册你的控制器。
-
@EricMitjans - 好的。所以......不是让你失望,而是你的实施有很多问题。给我一点时间,我会重构你的 Plunkr。将超过 5 分钟;)
-
@EricMitjans - 我现在正在处理它。应该可以帮助我查明代码的问题。
-
@EricMitjans - 这是完全重构的 Plunkr plnkr.co/edit/6R3zEX?p=preview
标签: javascript angularjs angularjs-ng-click