我有一个作用域内的http调用后没有更新的作用域。Angular JS:赋值后未更新的值
var form = {}
var requestForm = {}
requestForm['name'] = $scope.brand.name;
requestForm['country'] = $scope.brand.countryCode;
所以我设置一个$scope.mergeId
我的初始化为0值,那么tableFactory.setMergeRequest
将调用工厂文件中的HTTP调用,并会返回一个对象,用布尔和编号。
$scope.mergeId = 0;
//set merge request/id
tableFactory.setMergeRequest(requestForm).then(function(data){
if(data.mergeRequestStatus){
console.log(data);
$scope.mergeId = data.insertedRequestId; //456
}else{
console.log('no merge id');
}
});
form['mergeId'] = $scope.mergeId;
布尔将是真实的,它应该在ID(456)分配给$scope.mergeId
。然后,该范围将用于分配将用于另一个http调用的form['mergeId']
变量。
当我检查控制台时,窗体变量为零,所以它没有更新。我拿出了初始化程序,但后来说它是未定义的。 http调用正在发回数据,这只是范围没有被更新。
有没有人经历过这个问题?我应该改变这个http调用的设置吗?我试图做到这一点,但它没有设置正确的值,它设置了一个对象。
form['mergeId'] = tableFactory.setMergeRequest(requestForm).then(function(data){
if(data.mergeRequestStatus){
return data.insertedRequestId
}else{
return null
}
});
我从这种方式得到的回应是一个d,我如何得到这个值?
请帮帮忙,我已经遇到这个问题了一会儿。您的帮助将不胜感激。
附加信息
这是HTTP调用其中tableFactory.setMergeRequest
被触发。
var setMergeRequest = function(object){
var mergeRequestCall = {
method: 'POST',
url: CONFIG.PYTHON_API_END_POINT + '/api/mergerequest',
data: object
}
var d = $q.defer();
$http(mergeRequestCall)
.success(function(response){
d.resolve(response);
}).error(function(response){
d.resolve([]);
});
return d.promise;
}
的回应是:
{
"insertedRequestId": 456,
"mergeRequestStatus": true
}
http,从第一个http获得响应之后,对吗? –
@AgamBanga是的,这是正确的 – medev21
你可以看看JavaScript中的承诺链。你的问题是''chaining in JS'的使用案例 –