使用 AngularJS 和 ng-repeat初始化选择
Initializing select with AngularJS and ng-repeat
我正在尝试让选择框以使用 ng-repeat 和 AngularJS 1.1.5 开始预填充选项。相反,选择总是从不选择任何内容开始。它还有一个空选项,我不想要。我认为没有选择任何东西的副作用。
我可以使用 ng-options 而不是 ng-repeat,但我想在这种情况下使用 ng-repeat。虽然我缩小范围的示例没有显示它,但我也想设置每个选项的 title 属性,据我所知,使用 ng-options 无法做到这一点。
我认为这与常见的 AngularJs 范围/原型继承问题无关。至少我在巴塔朗检查时没有看到任何明显的东西。此外,当您使用 UI 在选择中选择一个选项时,模型会正确更新。
这是 HTML:
<body ng-app ng-controller="AppCtrl">
<div>
Operator is: {{filterCondition.operator}}
</div>
<select ng-model="filterCondition.operator">
<option
ng-repeat="operator in operators"
value="{{operator.value}}"
>
{{operator.displayName}}
</option>
</select>
</body>
而 JavaScript:
function AppCtrl($scope) {
$scope.filterCondition={
operator: 'eq'
}
$scope.operators = [
{value: 'eq', displayName: 'equals'},
{value: 'neq', displayName: 'not equal'}
]
}
JS小提琴:http://jsfiddle.net/coverbeck/FxM3B/2/
好的。如果您不想使用正确的方式ng-options
,则可以添加ng-selected
属性,其中包含option
指令的条件检查逻辑,以使预选工作。
<select ng-model="filterCondition.operator">
<option ng-selected="{{operator.value == filterCondition.operator}}"
ng-repeat="operator in operators"
value="{{operator.value}}">
{{operator.displayName}}
</option>
</select>
工作演示
对于选择标签,angular 提供了 ng-options 指令。它为您提供了设置选项和设置默认值的特定框架。这是使用ng选项的更新小提琴,按预期工作:http://jsfiddle.net/FxM3B/4/
更新的 HTML(代码保持不变)
<body ng-app ng-controller="AppCtrl">
<div>Operator is: {{filterCondition.operator}}</div>
<select ng-model="filterCondition.operator" ng-options="operator.value as operator.displayName for operator in operators">
</select>
</body>
angular 向选择注入空选项元素的事实是,默认情况下绑定到它的模型对象在初始化时带有一个空值。
如果要选择默认选项,则可以在控制器中的示波器上设置它
$scope.filterCondition.operator = "your value here";
如果你想要一个空的选项占位符,这对我有用
<select ng-model="filterCondition.operator" ng-options="operator.id as operator.name for operator in operators">
<option value="">Choose Operator</option>
</select>
感謝TheSharpieOne指出ng-selected的選項。如果这是作为答案而不是评论发布的,我会把它作为正确的答案。
这是一个工作的JSFiddle:http://jsfiddle.net/coverbeck/FxM3B/5/。
我还更新了小提琴以使用我在原始帖子中省略的 title 属性,因为它不是问题的原因(但这就是我想使用 ng-repeat 而不是 ng-options 的原因)。
.HTML:
<body ng-app ng-controller="AppCtrl">
<div>Operator is: {{filterCondition.operator}}</div>
<select ng-model="filterCondition.operator">
<option ng-repeat="operator in operators" title="{{operator.title}}" ng-selected="{{operator.value == filterCondition.operator}}" value="{{operator.value}}">{{operator.displayName}}</option>
</select>
</body>
.JS:
function AppCtrl($scope) {
$scope.filterCondition={
operator: 'eq'
}
$scope.operators = [
{value: 'eq', displayName: 'equals', title: 'The equals operator does blah, blah'},
{value: 'neq', displayName: 'not equal', title: 'The not equals operator does yada yada'}
]
}
正如建议的那样,您需要使用 ng-options,不幸的是,我相信您需要默认引用数组元素(除非数组是字符串数组)。
http://jsfiddle.net/FxM3B/3/
JavaScript:
function AppCtrl($scope) {
$scope.operators = [
{value: 'eq', displayName: 'equals'},
{value: 'neq', displayName: 'not equal'}
]
$scope.filterCondition={
operator: $scope.operators[0]
}
}
该 HTML:
<body ng-app ng-controller="AppCtrl">
<div>Operator is: {{filterCondition.operator.value}}</div>
<select ng-model="filterCondition.operator" ng-options="operator.displayName for operator in operators">
</select>
</body>
如果您使用角度材质的 md-select 和 ng 重复 md-option ,则可以将ng-model-options="{trackBy: '$value.id'}"
添加到本笔中显示的 md-select 标签灰分中
法典:
<md-select ng-model="user" style="min-width: 200px;" ng-model-options="{trackBy: '$value.id'}">
<md-select-label>{{ user ? user.name : 'Assign to user' }}</md-select-label>
<md-option ng-value="user" ng-repeat="user in users">{{user.name}}</md-option>
</md-select>
- 初始化ng模型时,Angular ui选择占位符不起作用
- 当使用Materialize和Meteor时,我应该在哪里初始化选择
- 选择要初始化精细上传器的文件输入
- 如何初始化Twitter引导程序表单助手日期选择器
- MVC / 引导 - 组中的单选按钮在初始化时未选择
- j查询选择菜单未初始化
- 初始化引导日期选择器后调用 noConflict()
- 如何重新初始化引导日期选择器
- 使用 PHP 变量初始化选择标签
- 使用 AngularJS 和 ng-repeat初始化选择
- 启动日期选择器格式在初始化时不起作用
- 如何访问动态生成的选择列表的表单元素值;s在初始化时隐藏
- 位置选择器无法在谷歌地图初始化中工作
- JS闭包——依赖回调的多个日期选择器初始化/调用
- 用“日期”初始化的值是什么?日期选择器的beforeShowDay函数中的参数
- 选择插件初始化
- 使.close选择填充来初始化脚本
- Jquery选择框脚本没有自动初始化
- 材质选择初始化在vue.js
- 如何处理剑道UI MVVM日期选择器初始化