如何将这个新值推送到数组上?

时间:2016-06-16 18:14:23

标签: angularjs

我在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个函数分开吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您正在成功函数中定义$scope.stock,称为异步,因此您pushstock的下一行尚未初始化,因为它将在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
            });
};