2014-09-23 68 views
4

我找到了this相關主題,其中答案建議注意模型更改而不是更改選擇。但在我的例子中,「模型」是列表中的對象的一部分。是否爲列表中的每個對象初始化$watch正確的方法是?Angular - ngChange在ngModel之前觸發<select>

選擇

<li data-ng-repeat="obj in main.list track by $index"> 
    <select data-ng-change="main.changeStatus(obj)" data-ng-model="obj.status"> 
     <option value="A">A</option> 
     <option value="B">B</option> 
     <option value="C">C</option> 
    </select> 
</li> 

changeStatus

我需要更新對象或已接收到正確的對象改變方法。

main.changeStatus = function(obj) { 
    var r = new Resource(obj); 
    ... 
    r.$save({...}, function (savedObj) { 
    ... 
    }); 
} 

解決此問題的正確方法是什麼?

感謝

編輯:我想我沒有問正確的問題。

發佈的代碼沒有達到我在找什麼,因爲更改方法在模型更新之前得到執行,因此我將不正確的/舊的對象發送到後端。現在有幾種方法來解決這個問題

  • 創建一個新的變量,並通過對象的列表使用它作爲模型
  • 迭代和$看每一個狀態屬性
  • 另一個我未知的方式?

意想不到我得到的新對象的變化方法,但我不知道如何。

編輯2:我試圖寫一個小提琴來說清楚,但它在那裏工作。我需要更深入地瞭解我的代碼,因爲問題似乎在其他地方。

+0

你可以這樣做 – 2014-09-23 12:11:29

+0

主要區別在於,當模型以編程方式更改時,ng-change將不會被觸發,它只對輸入值更改作出反應。 – 2014-09-23 12:13:39

+0

好的,但對象只能通過我想改變當前對象的「狀態」屬性。我將對象傳遞給「更改」方法,但傳遞對象的「狀態」仍然是舊值。我想也許我不能將該對象傳遞給該方法,並試圖從列表中讀取它,但列表中的對象也未更新。 這意味着「更改」方法在對象的模型(狀態)更改之前執行。但是我需要更改方法中的更新對象來更新數據庫。 – KenavR 2014-09-23 12:54:30

+0

我的朋友,嘗試使用* ng-options *指令簡單文檔學習在這裏https://docs.angularjs。組織/ API /納克/指令/選擇並只可以通過除在NG-變化傳遞既OBJ和obj.status一起設置obj的狀態將其設置像obj.status = obj.status [從NG-模型],我意味着你只能在你的代碼中改變視圖,你可以用ng-change方法在控制器中設置狀態 – katmanco 2014-09-25 07:54:20