为什么ng选项指令需要ng模型
Why ng-model is required for ng-options directive
标记
<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-options
需要ng-model
来填充选项?
ngOptions
需要模型来确定默认情况下应选择哪个选项,或者在选择更改时写入所选对象/值的模型。
如果没有ngModel
指令,则很难访问所选的值,并且当人们查询DOM以确定值或为此编写自己的指令时,可能会导致错误的实践代码。在这两种情况下,这都不是理想的,因为这类事情是Angular form元素指令的关键思想。
另外,不要忘记ngOptions
和ngModel
的结合允许开发人员将整个对象绑定为select元素的"值",如果没有ngModel
,这将很棘手。
最后,如果出于某种原因不想选择任何模型(尽管这没有什么意义),可以使用ngRepeat
渲染选项。
如果没有模型绑定到选择,那么在选择一个选项后,选择将写入到哪里?
至于选项没有显示的原因,你可以看到源代码:
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;
链接函数会被截断,并且不会创建所有渲染函数。
来自文档:
当模型需要绑定到非字符串值时,应使用ngOptions
ngOptions
的关键是为模型提供值,而不仅仅是渲染option
元素。因此,在没有ngModel
的情况下使用是没有意义的。
相关文章:
- 角度无线电按钮ng模型不起作用
- ng模型内的ng重复的ng重复开始
- 将输入值设置为ng模型属性[Angular]时出现问题
- 自定义指令中的AngularJS ng模型
- 如何为动态创建的文本区域中输入的值更新ng模型
- ng重复中的ng模型-初始化唯一作用域属性
- ng重复变量到ng模型
- 初始化ng模型时,Angular ui选择占位符不起作用
- 角度去抖动(ng模型选项)不起作用
- 即使 ng 模型有值,也使输入字段为空
- 选择框中带有关联的ng模型,选项中带有ng重复
- 为什么我的指令(使用链接)没有出现,并允许ng模型看到它
- AngularJS+IE 11+聚合物=ng模型未更新
- ng模型在$(element).clone()之后不起作用
- 为什么ng选项指令需要ng模型
- 使用引导时间选取器时,没有更新数据ng模型值
- 具有ng重复的动态ng模型
- 有没有一种方法可以在设计模式下将ng模型或工厂绑定到iframe
- 删除ng模型中的ng模型输入值
- Angular.js默认选中不'不适用于ng模型