无法将数据推送到列表

时间:2016-09-16 13:12:14

标签: angularjs

我有一个包含对象列表的列表,所以现在我想再向主列表中的每个列表添加一个对象 我正在使用AngularJS

这是我试过的代码

$scope.mediaList = [];

$scope.getTheProfile = function(data){
        for(var i in data)
        {
            ProfileService.getByHandle(data[i].handle,function(profiledata)
                {
                    $scope.mediaList[i].displayName = profiledata.name.displayName
                },
                function(data , status){
                    console.log("In Error");
                    if(status == '400'){
                        $scope.errors.push(data["ERROR"])
                    }
                },
                function(data , status){
                    console.log("In forbidden")
                })
        }
        alert($scope.mediaList[0].displayName)
    }

所以我试图将displayName添加到该列表中 现在问题是我无法获得该警报中的值 如果该警报在ProfileService.getByHandle函数内,那么我将获得值

这是函数getByHandle

this.getByHandle = function(handle, successCB, errorCB, forbiddenCB) {
        console.log("In Profile Service for fetching the profile by handle: "+handle);

        HttpCommunicationUtil.doGet(apiConstants["profile"]["getByHandle"]+"/"+handle, successCB, errorCB, forbiddenCB);
    };

1 个答案:

答案 0 :(得分:0)

查看getByHandle,您似乎正在使用HttpCommunicationUtil.doGet发送异步 HTTP请求。

这样做:for循环将进行HTTP调用并触发此警报alert($scope.mediaList[0].displayName),而不等待getByHandle的响应,因为它是异步请求。

因此,当您尝试alert时,由于第1行,[]会有一个空数组$scope.mediaList值。所以$scope.mediaList[0].displayName会产生错误,说无法获取未定义的displayName。

您可以在ProfileService.getByHandle中返回promises,并在解析后使用.then更新您的变量。

如果您可以发布HttpCommunicationUtil.doGet的代码,那么它会更有用。

修改: 如果没有HttpCommunicationUtil.doGet,我会告诉您如何以通用方式进行操作。

服务:

this.getByHandle : function(params) {
    return $http.get('/api/endpoint');
}

控制器:

ProfileService.getByHandle(params).then(function(data){
    //use data to push response in $scope.mediaList[i]
});