0

更新時に、ローカル コレクションに存在する古い値ではなく、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>

これどうやってするの?スコープを更新して新しい値を取得するにはどうすればよいですか? 私は角度が初めてです。

4

1 に答える 1

0

updateSupplieras にバインドしている場合は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初期値は、属性に自動的にバインドする必要があります。

于 2013-10-11T08:06:40.570 に答える