我正在尝试使用 Angular 为对象设置一个新属性。我可以看到该属性设置了正确的值,但是当我想用另一个函数保存它时,该属性消失了。
这是我目前所拥有的:
$scope.confirmTask = function(taskId, taskString){
campaignTaskCompleted(taskId, $scope.campaign._id).then(function(task){
//Here completed == true
console.log("task", task);
$scope.saveSocialPortal();
})
}
function campaignTaskCompleted(taskId, campaignId){
return new Promise(function(resolve){
for(var c =0; c < $scope.user.socialPortal.campaigns.length; c++){
if($scope.user.socialPortal.campaigns[c]._id == campaignId){
for(var i=0; i < $scope.user.socialPortal.campaigns[c].tasks.length; i++){
if($scope.campaign.tasks[i]._id == taskId){
$scope.campaign.tasks[i].completed = true;
resolve($scope.campaign.tasks[i]);
}
}
}
}
})
}
$scope.saveSocialPortal = function(){
//here completed is completely gone
console.log("save", $scope.user.socialPortal.campaigns[0].tasks);
$api.put('user-social-portal', {socialPortal: $scope.user.socialPortal})
.then(function(response) {
})
.catch(function(reason) {
console.log(reason);
})
}
这是什么原因?我该怎么做才能解决这个问题?
编辑:
我混淆了不同的变量($scope.campaign
和 $scope.user.socialPortal.campaigns
),因此此页面从一开始就出现了一些问题。
我完全重写了代码以始终使用 $scope.user.socialPortal
,这很有效。
最佳答案
也许我读错了你的代码。但似乎您将新的 completed
属性设置为 true
仅在 $scope.campaign.tasks[i]
而不是 $ scope.user.socialPortal.campaigns[0]
。也许他们应该指向同一个对象?目前尚不清楚他们是否这样做。
您是否至少需要以某种方式将完成的事件推送到 $scope.user.socialPortal.campaigns
数组中?
关于javascript - 赋值后丢失的 Angular ,对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45834665/