[英]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.