我在Angular控制器中有这个功能;
$scope.addPart = function (part) {
$http.get('stock/' + this.part.oemnumber).success(function (result) {
$scope.stock = result;
});
$scope.woParts.push({"id":part.id, "name":part.partname, "partno":part.partno, "oemnumber":part.oemnumber,
"stock":part.stock, "price":stock.unitcost});
$scope.part = '';
};
它将成功返回关联的库存记录,我可以将stock.unitcost输出到控制台并在视图中显示。我的问题是,我需要将值推送到woParts数组。
我使用当前语法获取未定义的库存。当我尝试将其更改为“price”时:$ scope.stock.unitcost它不会抛出错误但仍然无效。
我错过了什么?
我还试图预先定义它,但这也不起作用......
$scope.addPart = function (part) {
$http.get('stock/' + this.part.oemnumber).success(function (result) {
$scope.stock = result;
$scope.part.price = $scope.stock.unitcost;
});
$scope.woParts.push({"id":part.id, "name":part.partname, "partno":part.partno, "oemnumber":part.oemnumber,
"stock":part.stock, "price":part.price});
$scope.part = '';
};
我应该将股票获取和推入2个函数分开吗?
谢谢!
答案 0 :(得分:1)
您正在成功函数中定义$scope.stock
,称为异步,因此您push
,stock
的下一行尚未初始化,因为它将在http
来电回复。
相反,你可以这样做:
$scope.addPart = function (part) {
$http.get('stock/' + this.part.oemnumber).success(function (result) {
$scope.stock = result;
$scope.woParts.push({"id":part.id, "name":part.partname, "partno":part.partno, "oemnumber":part.oemnumber,
"stock":part.stock, "price":stock.unitcost});
});
};
答案 1 :(得分:1)
这里有几个问题。首先是您使用的是stock.unitcost
,我认为您真的需要$scope.stock.unitcost
。第二个问题是$http.get
是异步的,并且在尝试使用$scope.stock.unitcost
之前不会解析承诺(一旦你做了修复)。以下是我相信你想要重构你的代码片段(你需要在promise成功解析函数中移动功能):
$scope.addPart = function (part) {
$http.get('stock/' + this.part.oemnumber)
.then(
function(response) {
$scope.stock = response.data;
$scope.part.price = $scope.stock.unitcost;
$scope.woParts.push({
"id":part.id,
"name":part.partname,
"partno":part.partno,
"oemnumber":part.oemnumber,
"stock":part.stock,
"price":part.price});
$scope.part = '';
},
function(error) {
// handle the error from your $http.get
});
};