Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ng选项指令为什么需要ng模型_Javascript_Angularjs_Ng Options - Fatal编程技术网

Javascript ng选项指令为什么需要ng模型

Javascript ng选项指令为什么需要ng模型,javascript,angularjs,ng-options,Javascript,Angularjs,Ng Options,标记 <div ng-app> <div ng-controller="myCtrl"> <select ng-options="i for i in [1,2,3]"></select> </div> </div> 使用此标记,选项不会在选择中填充。当我提供ng model以及ng选项时,它会按预期工作 为什么ng选项需要ng模型来填充选项?ngOptions需要模型来确定默认情况下应选择哪个选项,或

标记

<div ng-app>
  <div ng-controller="myCtrl">
    <select ng-options="i for i in [1,2,3]"></select>
  </div>
</div>

使用此标记,
选项
不会在
选择中填充。当我提供
ng model
以及
ng选项时,它会按预期工作


为什么
ng选项
需要
ng模型
来填充选项?

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

如果没有
ngModel
指令,则很难访问选定的值,并且当人们查询DOM以确定值或为此编写自己的指令时,可能会导致错误的实践代码。在这两种情况下,这都不理想,因为这种类型的东西是Angle form元素指令的关键思想

另外,不要忘记,
ngOptions
ngModel
结合使用,允许开发人员将整个对象绑定为所选元素的“值”,如果没有
ngModel
,这将很棘手


最后,如果出于某种原因,用户不希望选择任何模型(尽管这没有什么意义),则可以使用
ngRepeat

呈现选项,如果没有绑定到选择的模型,则可以在选择选项后将选择写入何处

至于未显示选项的原因,您可以查看源代码:

链接函数是捷径,所有渲染函数都不会创建。

来自文档:

当模型需要绑定到非字符串值时,应使用ngOptions


ngOptions
的关键是为模型提供值,而不仅仅是渲染
选项
元素。因此,在没有
ngModel
的情况下使用它是没有意义的

谢谢您对
ng选项的详细解释。我了解
ng选项的用法和优点
<使用
ng repeat
的code>选项
不会强制执行有关
ng型号
的任何限制。为什么要使用
ng选项实施此限制
。为什么它不能计算表达式并填充选项呢?我认为这是设计决策。重复关注是没有意义的<如果需要,code>ngRepeat
已经可以渲染选项。但是,应使用
n选项
,以便更灵活、更有效地使用模型。允许
ngOptions
在没有
ngModel
的情况下工作是非常容易的,但是如果代码中出现了一些丑陋的
。为什么,如果你已经可以使用
ngRepeat
。这是一个有趣的想法。如果ngModel返回null而不是exit out,则他们可以创建一个空对象并将ngModelCtrl设置为链接中的值。文档中确实提到了ngOptions的好处是创建的作用域更少。就场景而言,我不想更新模型,我想使用表单提交发布数据。我已经阅读了源代码并发布了这个问题。添加这样一个条件的原因可能是什么?请注意,这是测试代码(1.4)。目前,
ngOptions
的功能已并入
select
指令。
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;