如何为ng-repeat中的每个项目调用一些$ scope.function?

时间:2017-11-09 03:24:15

标签: angularjs angularjs-ng-repeat angular-resource

我有一个表单需要输入的用户字符串才能提交。 提交时,使用输入值作为参数,通过服务创建范围值。 此范围值用于填充我的其余视图。

一切都很棒,除了我需要为这个范围值的每个项目返回一些函数。 我试图在视图上调用它,但是我得到一个无限循环。

不知道怎么在这里继续。你能帮我吗?

view.pug

form(ng-submit='userGetTopTracksReq(user)')
    .form-group
        label(for='user') User:
        input#user.form-control(ng-model='user' placeholder='user')
    .form-group
        button.btn.btn-success.btn-block(type='submit') Request
hr
table.table.table-sm.table-hover(ng-show='userGetTopTracksRes.toptracks')
    thead
        tr
            th Artist
            th Track
            th Playcount
            th Total Playcount
    tbody
        tr(ng-repeat='track in userGetTopTracksRes.toptracks.track')
            td {{track.artist.name}}
            td {{track.name}}
            td {{track.playcount}}
            td {{trackGetInfoReq(track.artist.name, track.name).track.playcount}}

controller.js

angular.module('app')
    .controller('userGetTopTracksController', function(lastFmService, $scope, $rootScope) {
        $scope.userGetTopTracksReq = (user) => {
            $scope.userGetTopTracksRes = lastFmService.get({
                api_key: $rootScope.api_key,
                method: 'user.getTopTracks',
                user: user,
                format: 'json',
                limit: 400
            });
        };

        $scope.trackGetInfoReq = (artist, track) => {
            return lastFmService.get({
                api_key: $rootScope.api_key,
                method: 'track.getInfo',
                artist: artist,
                track: track,
                format: 'json'
            });
        };
    });

services.js

angular.module('app')
    .factory('lastFmService', function($resource) {
        return $resource('http://ws.audioscrobbler.com/2.0/', {});
    });

2 个答案:

答案 0 :(得分:0)

在模板中,您想要调用该函数。因此,在访问其返回值的成员之前,您需要先调用该函数。例如:<input type="text" name="category[]" id="category" value="3" onclick ="box_val('3','3')">

答案 1 :(得分:0)

为什么不直接返回您想要显示的值而不是返回所有内容?

$scope.trackGetInfoReq = (artist, track) => {
    let data = lastFmService.get({
        api_key: $rootScope.api_key,
        method: 'track.getInfo',
        artist: artist,
        track: track,
        format: 'json'
    });
    return data.track.playcount;
};