2014-07-08 49 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