AngularJS:在put期间采用旧值而不是new

时间:2013-10-11 07:15:57

标签: javascript angularjs

更新时,我想插入来自ui的新值,而不是本地集合中存在的旧值。下面的代码在本地集合中插入旧值(我不希望这种情况发生)。

dataService.getSupplierById($routeParams.id)
.then(function (supplier) {
    $scope.supplier = supplier; //now this contains local collection

    $scope.save = function () {
        $scope.updatedSupplier = $scope.supplier; //I want the scope to be updated and take values from the ui

        dataService.updateSupplier($routeParams.id, $scope.updatedSupplier)
        .then(function () {
            //success

        },
            function () {
                //error

            });
    };
},
function () {
    //error
});

这是我的Html。

<div>
    <label for="City">City</label>
    <input name="City" type="text" data-ng-model="updateSupplier.city" value="{{supplier.city}}" />
</div>

我该怎么做?如何更新范围以获取新值?我是棱角分明的新人。

1 个答案:

答案 0 :(得分:0)

如果您绑定updateSupplier作为ng-model,那么您在保存时不应覆盖这些值:

$scope.save = function () {

    // remove the line that overwrites, was here    

    dataService.updateSupplier($routeParams.id, $scope.updatedSupplier)
        .then(function () {
            //success
        },
        function () {
            //error
        });
    };
}

Angular将负责对ng-model内的值进行双向绑定,因此在保存时它将具有在文本框中输入的正确值。

您还可以通过没有2个不同的范围属性来清理代码:

dataService.getSupplierById($routeParams.id)
.then(function (supplier) {
    $scope.supplier = supplier; //now this contains local collection

    $scope.save = function () {

        dataService.updateSupplier($routeParams.id, $scope.supplier )
        .then(function () {
            //success

        },
            function () {
                //error

            });
    };
},
function () {
    //error
});

然后在html:

<div>
    <label for="City">City</label>
    <input name="City" type="text" data-ng-model="supplier.city" />
</div>

初始值应自动绑定到value属性。