2016-05-09 5 views
0

私は保存メソッドを持っています。 SAVEをクリックすると、私は自分のページに50個以上のフィールドがあるので、変更されたフィールドだけを送信するだけです。毎回すべてのフィールドを送信するのは非常に重いです。更新方法を変更したフィールドのみを送信します

Api.Admin.update({ 
    obsoleteDate : AdminEdit.ObsoleteDate.$dirty== true?$scope.editObsoleteDate:""  
}); 

上記のフィールドの汚れ値がtrueまたはfalseであることを確認しています。値が変更されていない場合は、値を空として送信したくありません。それ以外の方法は何ですか?

答えて

0

私は通常、変更されたプロパティだけでオブジェクトを構築し、そのオブジェクトを送信します。私はそれを編集する前に元のオブジェクトのコピーを作成し、それを使って比較しますが、これを簡単に$ dirtyに適合させることができます。これらの線に沿って何か:

function getUpdateObject(orig, current) { 
    varChanges = {}; 

    for (var prop in orig) { 
     if (prop.indexOf("$") != 0 && orig[prop] !== current[prop]) { 
      varChanges[prop] = current[prop]; 
     } 
    } 
    return varChanges ; 
}; 

その後、私の更新コードは、主キーは、私は、そのオブジェクトへの作業とすることを送信していたものからは何でも割り当てて、ちょうど私の変更で新しいオブジェクトを取得するには、この関数を呼び出しますサーバ。私はあなたのバックエンドが何であるか分かりませんが、これを動作させるにはhttpパッチを行う必要があります。したがって、このような何か:

function save() { 
    var changes = getUpdateObject(vm.orig, vm.current) 
    changes.id = vm.orig.id 
    $http.patch("http:/serviceURI.com (" + changes.id + ")", changes).then(...) 
} 

私はODATAを使用するアプリケーションのうち、このコードを引っ張り、それをこの答えのためのビットを変更しますが、このコードのすべては、私は私のODATAの相互作用のすべてのために使用したサービスに存在します。

+0

マイクさんありがとうございました。あなたの説明に従ってコードが変更されました。それは働いた.. :)あなたに感謝!! – saurav

+0

素晴らしい! upvoteと答えを受け入れることを自由に感じてください。 :) –

関連する問題