【问题标题】:How an angular object gets the value of another object角度对象如何获取另一个对象的值
【发布时间】:2014-10-10 17:15:34
【问题描述】:

如何让对象继承其他对象的所有属性。

这是代码:

this.makeReady = function(order) {
    var tempOrder = angular.copy(order);
    tempOrder.status = 1;
    angular.forEach(tempOrder.items, function(item){
        item.status = 1;
    })
    return $http.put('/rest/change/invoice/'+order.id+'/', tempOrder).success(function(){
        order = tempOrder; // this doesn't work
    });
}

如果成功:更改该对象的值。

【问题讨论】:

  • 你在 makeReady 函数的 order 参数中传递了什么?如果是 $scope.order,那么只需在你的成功函数中使用$scope.order = tempOrder;
  • $scope.allOrders 包含所有订单,所以当我更改 order 时,它会影响 allOrders..

标签: javascript arrays angularjs object angularjs-scope


【解决方案1】:

尝试直接在您的$scope.allOrders 中编辑订单,看看是否能获得您想要的行为。

    this.makeReady = function (order) {
        var tempOrder = angular.copy(order);
        var orderIndex = $scope.allOrders.indexOf(order);
        tempOrder.status = 1;

        angular.forEach(tempOrder.items, function(item) {
            item.status = 1;
        });

        return $http.put('/rest/change/invoice/' + order.id + '/', tempOrder).success(function () {
            $scope.allOrders[orderIndex] = tempOrder;
        });
    }

【讨论】:

    【解决方案2】:

    使用这个

    this.makeReady = function(order) {
        var tempOrder = angular.copy(order);
        tempOrder.status = 1;
        angular.forEach(tempOrder.items, function(item){
            item.status = 1;
        })
        $http.put('/rest/change/invoice/'+order.id+'/', tempOrder).success(function(){
            order = tempOrder; // this doesn't work
            return order;
        });
    }
    

    或者使用回调函数

      this.makeReady = function(order, callback) {
            var tempOrder = angular.copy(order);
            tempOrder.status = 1;
            angular.forEach(tempOrder.items, function(item){
                item.status = 1;
            })
            $http.put('/rest/change/invoice/'+order.id+'/', tempOrder).success(function(){
                order = tempOrder; // this doesn't work
                callback(order)
            });
        };
    

    调用函数

    this.makeReady({status:1, data:2, items:{status:1}}, function(data){
    // this data your order variable in service
    })
    

    【讨论】:

    • 我不确定您的第一个示例是否会按预期工作。 $http.put 不是同步的。回调示例应该可以工作。
    • 第一个示例不起作用..第二个示例不符合我的逻辑,因为当我更新此订单时,它将在 allOrders 变量上更新..如果有效,第一个示例会很棒..
    猜你喜欢
    • 2021-03-05
    • 2021-09-05
    • 2023-02-06
    • 2017-06-15
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    相关资源
    最近更新 更多