当前位置: 首页 > 面试题库 >

如何使用ng-options抑制value属性内的变量类型?

华升
2023-03-14
问题内容

运行AngularJS 1.4.0-rc.1,ng-options循环中的值包含变量的类型。

请参见以下代码:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0-rc.1/angular.js">

</script>

<script>

  angular.module("selectOptionsTest", []).

    controller("SelectOptionsController", ["$scope", function($scope) {

      $scope.options = [

        {id: 1, label: "Item 1"},

        {id: 2, label: "Item 2"},

        {id: 3, label: "Item 3"}

      ];

    }]);

</script>

<div ng-app="selectOptionsTest" ng-controller="SelectOptionsController">

  <select ng-model="opt" ng-options="option.id as option.label for option in options">

  </select>

</div>

这将生成如下的HTML代码:

<select ng-options="option.id as option.label for option in options" ng-model="option" class="ng-pristine ng-valid ng-touched">
  <option value="?" selected="selected"></option>
  <option value="number:1" label="Item 1">Item 1</option>
  <option value="number:2" label="Item 2">Item 2</option>
  <option value="number:3" label="Item 3">Item 3</option>
</select>

为什么该值以变量类型(即number:?)为前缀?在AngularJS的早期版本(例如,当前稳定的1.3.15)的value属性都充满了预期值123

那么,这是1.4.0-rc.1中的错误,还是现在需要以不同的方式处理这些情况?


问题答案:

显然,ngOptions指令的处理方式有所变化。AngularJS
1.4
的迁移说明中简要说明了此更改。可以在提交消息中找到有关更改的更详细描述:

使用时ngOptions,指令将代理键用作<option>元素的值。该提交将更改用作代理键的实际字符串。现在,我们存储一个通过调用hashKeyoptions集合中的项目计算得出的字符串;以前它是集合中项目的索引或键。

(这与在select指令中表示未知选项值的方式保持一致。)

在您可能看到之前:

<select ng-model="x" ng-option="i in items"> <option value="1">a</option> <option value="2">b</option> <option value="3">c</option> <option value="4">d</option> </select>

现在将是这样的:

<select ng-model="x" ng-option="i in items"> <option value="string:a">a</option> <option value="string:b">b</option> <option value="string:c">c</option> <option value="string:d">d</option> </select>

如果您的应用程序代码依赖于该值(不应该),那么您将需要修改您的应用程序以适应此值。您可能会发现您可以使用的track by功能,ngOptions因为它可以指定存储的密钥。

这意味着您现在需要使用track by来获得与以前相同的结果。要解决问题中的示例,则需要如下所示:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0-rc.2/angular.js">

</script>

<script>

  angular.module("selectOptionsTest", []).

    controller("SelectOptionsController", ["$scope", function($scope) {

      $scope.options = [

        {id: 1, label: "Item 1"},

        {id: 2, label: "Item 2"},

        {id: 3, label: "Item 3"}

      ];

    }]);

</script>

<div ng-app="selectOptionsTest" ng-controller="SelectOptionsController">

  <select ng-model="opt" ng-options="option.id as option.label for option in options track by option.id">

  </select>

</div>


 类似资料:
  • 问题内容: 这似乎困扰着很多人(包括我)。 在AngularJS中使用指令填充标签的选项时,我无法弄清楚如何为选项设置值。对此的文档确实不清楚- 至少对于像我这样的简单人而言。 我可以像这样轻松设置选项的文本: 例如,何时: 设置选项值应该是(可能是)最简单的事情,但是到目前为止,我还是不明白。 问题答案: 参见 ngOptions ngOptions(可选) – { } –以下形式之一: 对于数

  • 描述 (Description) 您可以使用bean内省机制来抑制特定属性。 专用BeanIntrospector接口由名为SuppressPropertiesBeanIntrospector的类型实现,该类型SuppressPropertiesBeanIntrospector Java bean的特殊类属性。 需要提供属性名称的集合,这些属性名称在创建实例时无法在bean上访问。 如果这些属性由

  • 问题内容: angularjs模板中的和属性之间有什么区别?如果我在使用value属性的字段上使用它,则它正常工作,但是如果我将该属性更改为它,它将停止工作。 问题答案: 根据 文档 ,采用 “角表达式,其值将绑定到 元素的属性”。 因此,当您使用时,它将被解释为一个表达式,并且被绑定到(可能是)。 对于评估表达式很有用- 与设置硬编码值相比没有优势。但是,如果您想使用硬编码值,则必须将其包含在:

  • 问题内容: 我有一个Person对象数组 我正在使用带有ng-options这样的select: 我想显示与记录 符合条件的:假 的 红 颜色。因此,问题是我如何使用in 才能实现此目的?因为我们没有使用任何标签,如果我只需添加它不会工作在元素本身。 问题答案: 您可以在处理ngOptions指令后创建一个处理选项的指令,以适当的类更新它们。 更新 :旧代码有一些错误,并且自回答这个问题以来,我学

  • 在为Logback appender指定实现类时,是否可以使用变量替换?例如, 如上所述指定时,Logback似乎试图加载名称为“${LOGFILE_APPENDER_CLASS}”的类。也就是说,不执行变量替换! 我想将输出发送到eclipse开发人员的生产和控制台中的文件。如果可能的话,我不想重复appender配置,因为它包含了一长串过滤器,在大多数情况下都是相同的。

  • 属性与Java中的字段是相同的,但是更加强大。属性做的事情是字段加上getter加上setter。我们通过一个例子来比较他们的不同之处。这是Java中字段安全访问和修改所需要的代码: public class Person { private String name; public String getName() { return name; }