我有一个绑定到对象的ng-options选项。以编程方式设置ng-model仅在将其设置为字符串时才能正常工作(更新选择)。如果我将ng-model设置为整数,它就不起作用。我真的不想进行这种转换。这是唯一的方法吗?
<div ng-controller="MyCtrl">
<select ng-options="id as name for (id, name) in items" ng-model="selected"></select>
<div>Selected ID: {{selected}} </div>
<button ng-click="setSelected(1)">Set Selected to ID 1 as Integer</button>
<button ng-click="setSelected('1')">Set Selected to ID 1 as String</button>
<div>Programmatically setting the ng-model as string sets the dropdown but not as integer.</div>
</div>
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.items = {1: 'a', 2: 'b', 3:'c'};
$scope.selected = null;
$scope.setSelected = function(id) {
$scope.selected = id;
}
}
答案 0 :(得分:4)
<强> EDITED 强>
如果您正在寻找快速而肮脏的解决方案,则可以在以编程方式设置模型值时尝试使用toString
。有关问题核心的详细信息,请参阅@ExpertSystems答案。
$scope.setSelected = function(id) {
$scope.selected = id.toString();
}
答案 1 :(得分:3)
这很奇怪,但你可以通过强制在理解表达式中进行强制转换来获得ng-options
和ng-model
之间的绑定:
ng-options="id*1 as name for (id, name) in items"
这是你的小提示,展示了这个技巧:http://jsfiddle.net/wittwerj/HMjnV/9/
话虽如此,我更喜欢Marc在控制器中转换为String的方法。
答案 2 :(得分:2)
是预先填充价值,然后肯定它应该是string
。由于option
代码中的value属性仅需String
。但是,在 AngularJs 中,您可以在 fiddle 中提供类似的参考。问题的解决方法是将id转换为字符串。
答案 3 :(得分:0)
JS Objects 具有属性名称 - 值对
value
可以是任何类型,但name
始终是字符串
虽然您认为将其定义为数字,但它会自动转换为字符串。
你无法改变它(即创建一个带有数字属性名称的对象)。