我在工厂http调用中分配后没有更新范围。
var form = {}
var requestForm = {}
requestForm['name'] = $scope.brand.name;
requestForm['country'] = $scope.brand.countryCode;
所以我将$scope.mergeId
设置为初始化程序为值0,然后tableFactory.setMergeRequest
将在工厂文件中调用http调用并返回一个对象,其中包含一个布尔值和一个id#
$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;
布尔值为true,它应该将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,我如何获得价值?
请帮忙,我一直坚持这个问题。我们将非常感谢您的帮助。
附加信息
这是在tableFactory.setMergeRequest
被触发的http呼叫。
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
}
答案 0 :(得分:0)
您应该设置解析promise的值,而不是将值设置为函数
tableFactory.setMergeRequest(requestForm).then(function(data){
if(data.mergeRequestStatus){
form['mergeId'] = data.insertedRequestId;
}else{
form['mergeId'] = null;
}
});