簡體   English   中英

角回調數組推送問題

[英]Angular callback array push issue

我正在嘗試創建一個類似於instagram的評論部分,其中顯示評論列表,以及每個評論的用戶個人資料和用戶名。

我在解析中有一個注釋表,在解析中有一個用戶表,因此我必須對每個注釋執行進一步的查詢,以獲得個人資料圖片鏈接和用戶名。

我正在使用角度來做到這一點。 我有一個comment數組來存儲所有評論,並且正在將一個對象推到該數組上,其中包含:-用戶名-個人資料圖片-comment

var commentQuery = parseQuery.new('Comment');
commentQuery.equalTo("ID", id);
parseQuery.find(commentQuery)
.then(function(results) {
    for(var i =0; i < results.length; i++){
        var comment = results[i].get('comment');
        var userQuery = parseQuery.new('_User');
        userQuery.equalTo("objectId", results[i].get('userObject')[0].id);
        parseQuery.find(userQuery)
        .then(function(user) {  
            var commentObject = {
               comment: comment,
               username : '',
               profile: ''
        }
            commentObject['profile'] = user[0].get('profile_picture')['_url'];
            commentObject['username'] = user[0].get('liveUsername');
            $scope.comments.push(commentObject);    
        })
    }   
})

然后在ng-repeat中生成的是一個列表,其中包含正確數量的注釋,但是所有注釋都是相同的!

如果我按注釋將它們打印到控制台,則它們是正確的。 這是在對象創建時出錯的地方,並且所有注釋對象中都放置了相同的數據。

在此處輸入圖片說明

$scope.comments包含乘法$scope.commentObject ,因此,當您更改$scope.commentObject它將在整個數組中更改。 您可以在.then(function(user) {回調中創建新的var並將其推送到數組。

@OP事情是$ scope.commentObject是一個引用,因此更新此對象時,其所有引用都將更新為相同的值。 考慮這個例子:

var list=[];
$scope.obj="a";
list.push($scope.obj);
console.log(list);  //it will print ['a']
$scope.obj="b";
console.log(list);  //it will print ['b'] , even though  we haven't pushed any new value in the list. 

您會看到問題在於您一次又一次地推送相同的引用。 要解決此問題,請將您的代碼更改為以下內容:

parseQuery.find(userQuery)
    .then(function(user) {  
        var commentObject = {
           comment: comment,
           username : '',
           profile: ''
    }
        commentObject['profile'] = user[0].get('profile_picture')['_url'];
        commentObject['username'] = user[0].get('liveUsername');
        $scope.comments.push(commentObject); 
    })

提供的解決方案是正確的,如果如上所述,您仍然有相同的注釋,則應手動檢查用戶表中的內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM