标记
<div ng-app>
<div ng-controller="myCtrl">
<select ng-options="i for i in [1,2,3]"></select>
</div>
</div>
使用此标记时,options
中不会填充select
。当我提供ng-model
以及ng-options
时,它会按预期工作。
为什么ng-model
需要ng-options
来填充选项?
答案 0 :(得分:1)
ngOptions
需要模型以确定默认情况下应选择哪个选项,或者在选择更改时写入所选对象/值的模型。
如果没有ngModel
指令,则很难访问所选值,并且当人们查询DOM以确定值或为此目的编写自己的指令时,它可能会导致错误练习代码。在这两种情况下,这都不理想,因为这类事物是Angular表单元素指令的关键思想。
另外请不要忘记ngOptions
与ngModel
一起允许开发人员将整个对象绑定为select元素的“值”,如果没有ngModel
,这将是棘手的。
最后,如果出于某种原因,人们不希望选择任何模型(尽管没有意义),可以使用ngRepeat
呈现选项。
答案 1 :(得分:1)
如果没有绑定到选择的模型,在选择了一个选项,将选择写到哪里?
至于没有显示选项的原因,您可以看到源代码:
https://github.com/angular/angular.js/blob/master/src/ng/directive/ngOptions.js#L355
return {
restrict: 'A',
terminal: true,
require: ['select', '?ngModel'],
link: function(scope, selectElement, attr, ctrls) {
// if ngModel is not defined, we don't need to do anything
var ngModelCtrl = ctrls[1];
if (!ngModelCtrl) return;
链接功能短路,并且不会创建所有渲染功能。
答案 2 :(得分:0)
来自文档:
当模型需要绑定到非字符串值
时,应使用ngOptions
ngOptions
的重点是为模型提供值,而不仅仅是呈现option
元素。因此,没有ngModel
使用它是没有意义的。