2016-05-09 31 views
0

我有一個保存方法。單擊保存時,我只想發送更改的字段而不是所有內容。因爲我的頁面上有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

非常感謝Mike ..它根據你的解釋改變了我的代碼。它的工作.. :) ..謝謝你! – saurav

+0

太棒了!隨時upvote並接受答案。 :) –