2014-07-08 80 views
2

後更新範圍值我有一種情景,用戶從彈出框中的網格中選擇一個值,並將所選值顯示在容器頁的文本框中。在用戶選擇一個值後,彈出引發一個在容器頁面中捕獲的事件。現在我可以使用.val()設置文本框的值,但是如何更新模型?在AngularJS中動態更新文本框

$scope.$on('rowSelectedInPopup', function (event: ng.IAngularEvent, ...data) { 
    if (elementId === data[1].toString()) { 
     $(elementId).val(data[0].toString()); 
     $(elementId + "_inlinelbl").html(data[0].toString()); 
    } 
}); 

這是我的文本和HTML標籤:

<input type="text" value="" id="ServiceManagerglookup" ng-model="Model.Person2.Name" /> 
<label id="ServiceManagerglookup_inlinelbl" ng-model="Model.Person2.Name">ABC</label> 

請注意,文本框,可以在範圍與任意字段約束例如Model.AVC.XYZ.LMN

+0

對不起,如果我誤解,但;記住雙向綁定是Angular的關鍵功能之一 - 而不是改變視圖,你應該簡單地改變模型,數據會自動更新。所以通過你的控制器只需設置'$ scope.Model.Person2.Name = html(data [0] .toString())'。當你完成這個工作時,帶有ng-model =「Model.Person2.Name」的輸入元素將被簡單地更新。 –

+0

嗨,感謝您的回覆。問題是Model.Person2.Name也是動態的,因爲控件可以在不同的地方使用並綁定到不同的字段。所以我必須做一些像scope [「Model」] [「Person2」] [「Name」]的東西,它可以隨着每個屏幕而改變。所以我認爲正確的問題是「我如何更新範圍內的值,如果我有像Model.Person2.Name或Model.ABC.XYZ.PQR字符串」 – Haris

+0

我看到 - 我想不出任何其他解決方案簡單地分割所述字符串; var array = string.split('。')'然後做'$ scope.array [0] .array [1] .array [2] .array [3] = html(data [0] .toString() )'不完全是一個很好的解決方案,但解決方案 –

回答

1

除了更改您還需要告知角的值的值改使用

$(elementId).trigger('input');

像這樣

$scope.$on('rowSelectedInPopup', function (event: ng.IAngularEvent, ...data) { 
    if (elementId === data[1].toString()) { 
     $(elementId).val(data[0].toString()); 
     $(elementId + "_inlinelbl").html(data[0].toString()); 
     $(elementId).trigger('input'); 
    } 
}); 

觸發此輸入監聽的是通常由瀏覽器完成 - 所以當您直接更改模型時,您不得不觸發事件。

+0

嗨,這適用於文本框,但我嘗試與隱藏字段相同的東西,但它沒有奏效。所以需求是一樣的,但隱藏領域。 什麼是.trigger('input')的輸入?我已經讀過,我們必須確定事件的名稱來觸發並且輸入不是事件名稱。 – Haris

+0

.trigger('input')是一個事件名稱。對於隱藏字段,您可以嘗試'$(elementId).triggerHandler(「change」);' –

+0

yes試過,但範圍中的值未更新。嘗試它像這樣:angular.element(hdnElement.selector).triggerHandler('change');還有hdnElement.trigger('change'); – Haris