我的资源对象中有一个方法:
resources.type
otherstuff: 'more strings'
type:'specifictype'
morestuff: 'morestuff'
用户可以通过下拉列表/通过另一个调用来更改此类型,该调用获取所有可能类型的列表,这些类型看起来像resourceList.types,其中包含像json这样的对象列表
types:
[
{name:'resourcetype1'},
{name:'resourcetype2'},
etc...
],
我的HTML看起来像:
<select ng-model="resources.type" ng-options="name.name for name in resourceList.types">
</select>
选择/下拉框填充了我的resourceList.type内容,但是当页面加载时,ng-model没有设置为已选择的资源类型。实际上,当您单击时,它会在下拉列表的顶部选择一个空白条目。这个角度有点挑剔吗?如何让ng-model以我想要的方式运行?
我尝试使用不同的方法来获取重复,但我觉得这更像是角度连接模型的方式。它是否只是将字符串与ng-options列表匹配?
这里是plnkr,因为你可以看到它没有默认为type1
答案 0 :(得分:8)
在Angular中,模型是真理的唯一来源
这意味着如果您想要选择一个值(并绑定到ngModel
),则需要将其分配给模型:
<select ng-model="resources.type"
ng-options="type.name as type.name for type in resourceList.types">
</select>
$scope.resources = {...};
$scope.resourceList = {
...
types: [
{name: 'resourcetype1'},
{name: 'resourcetype2'},
...
]
};
// Set the model to the desired value
$scope.resources.type = $scope.resourceList.types[0].name;
另请参阅此 short demo 。
答案 1 :(得分:2)
您不必将模型的值设置为resourceList中的引用对象。事实上,如果没有这一行,接受的答案就可以正常运行:
$scope.resources.type = $scope.resourceList.types[0].name;
它是如何工作的?感谢ngOptions中的“as”表示法。如果没有“as”,则匹配是在完整类型元素(即对象)上进行匹配,因此匹配是在引用的对象上进行的,而不是名称的值。 使用“as”匹配元素的属性name。
我已经分叉了那个:http://plnkr.co/edit/kORfxGdsWBUlFWHXp6Ry?p=preview
答案 2 :(得分:1)
在我的情况下它没有用,因为ngOptions是一个整数数组,我试图将ngModal设置为字符串类型(2014年2)。
解决方案很简单:parseInt函数