繁体   English   中英

为什么ng-options指令需要ng-model

[英]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-modelng-options它按预期工作。

为什么ng-model ng-options需要ng-model来填充选项?

ngOptions需要模型以确定默认情况下应选择哪个选项或选择更改时写入所选对象/值的模型。

如果没有ngModel指令,则很难访问所选值,并且当人们查询DOM以确定值或为此目的编写自己的指令时,它可能会导致错误练习代码。 在这两种情况下,这都不理想,因为这类事物是Angular表单元素指令的关键思想。

另外不要忘记ngOptionsngModel一起允许开发人员将整个对象绑定为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就可以使用ngModel

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM