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

使用数字作为模型的AngularJS ng-options不选择初始值

笪煌
2023-03-14
问题内容

我正在尝试将ng-options与一起使用,<select>以将数字整数值绑定到相应选项的列表。在我的控制器中,我有类似以下内容:

myApp.controller('MyCtrl', function() {
    var self = this;

    var unitOptionsFromServer = {
        2: "mA",
        3: "A",
        4: "mV",
        5: "V",
        6: "W",
        7: "kW"
    };

    self.unitsOptions = Object.keys(unitOptionsFromServer).map(function (key) {
        return { id: key, text: unitOptionsFromServer[key] };
    });

    self.selectedUnitOrdinal = 4; // Assume this value came from the server.
});

HTML:

<div ng-controller="MyCtrl as ctrl">
    <div>selectedUnitOrdinal: {{ctrl.selectedUnitOrdinal}}</div>
    <select ng-model="ctrl.selectedUnitOrdinal" ng-options="unit.id as unit.text for unit in ctrl.unitsOptions"></select>
</div>

这是一个演示问题的jsFiddle,以及我已经采取但不满意的其他一些方法

选择选项正在用一个空值初始化,而不是本例中预期的“ mV”。如果选择其他选项,则绑定似乎可以正常工作-selectedUnitOrdinal会正确更新。

我注意到,如果将初始模型值设置为字符串而不是数字,则初始选择有效(请参见小提琴中的#3)。

我真的很想ng-options与数字选项值一起玩。我怎样才能优雅地做到这一点?


问题答案:

Angular的ng- select指令文档说明了如何解决此问题。请参阅https://code.angularjs.org/1.4.7/docs/api/ng/directive/select(最后一部分)。

您可以创建一个convert-to-number指令并将其应用于您的选择标记:

JS

module.directive('convertToNumber', function() {
  return {
    require: 'ngModel',
    link: function(scope, element, attrs, ngModel) {
      ngModel.$parsers.push(function(val) {
        return val != null ? parseInt(val, 10) : null;
      });
      ngModel.$formatters.push(function(val) {
        return val != null ? '' + val : null;
      });
    }
  };
});

HTML

<select ng-model="model.id" convert-to-number>
  <option value="0">Zero</option>
  <option value="1">One</option>
  <option value="2">Two</option>
</select>

注意:我发现文档中的指令不能处理空值,因此我不得不对其进行一些调整。



 类似资料:
  • 问题内容: ModelMultipleChoiceField没有选择初始选择,并且在我的示例中,我无法进行以下修复 我的模型和表格: 我的工作和结果: 我希望它可以工作的方式: 1.我的视图从request.GET获取“公司” 2.然后过滤该“公司”的所有“联系人” 3.最后,它创建一个表单并将这些“联系人”作为“初始= {…}” 两个问题: 1. [尚未回答]如何使ModelMultipleCh

  • 问题内容: 我已经在其他帖子中阅读过,但是我无法弄清楚。 我有一个数组 我想将其呈现为: 我也想选择ID = 000002的选项。 我已经阅读了 select 并尝试过,但是我无法弄清楚。 问题答案: 要注意的一件事是ngOptions起作用 需要 ngModel。请注意,这是“将$ scope.blah设置为所选值”。 试试这个: 这里是AngularJS文档的更多内容(如果您还没有看过的话):

  • cesium每更新一个版本,就会导致默认的三维球不可见,原因是bingkey发生了变化,如果我们想设置三维球加载的初始图层,可以修改viewer的imageryProvider属性,但是这样做会导致一个问题:baseLayerPicker控件的按钮图标会显示为空白 今天我们来解决这个问题。 拿到问题不要直接开怼,想一想,应该怎么做? 首先我们知道这个控件就是一个div,那毫无疑问,使用js强制修改

  • 如果做了上一节练习,你会发现模型net在调用初始化函数initialize之后、在做前向计算net(X)之前时,权重参数的形状中出现了0。虽然直觉上initialize完成了所有参数初始化过程,然而这在Gluon中却是不一定的。我们在本节中详细讨论这个话题。 延后初始化 也许读者早就注意到了,在之前使用Gluon创建的全连接层都没有指定输入个数。例如,在上一节使用的多层感知机net里,我们创建的隐

  • 以下XSLT在Stylus Studio上无缝地将输入转换为输出: 为此,我必须在Stylus Studio的场景属性/处理器部分指定要使用的初始模板值。XSLT将用于java应用程序[使用Saxon HE 9.5.1-2库的iWay Service Manager],我无法找出指定初始模板的方法。也许我可以利用一个JVM选项,但我正在Internet上查找,还没有点击。 与此同时,我试图解决将用

  • 我有一个带有varchar类型电子邮件字段的表。 除表中的一封电子邮件外,其他所有电子邮件都能正常工作。