39

这是我的角度 html 文件代码。在我的 mongo 数据库frequencyType中添加为frequencyType = "1",但我想要frequencyType = NumberInt(1);

<div class="span4">
  <select class="span12 combobox" ng-model="frequencyType" required>
    <option value="1">Daily</option>
    <option value="2">Weekly</option>
    <option value="3">Monthly</option>
    <option value="4">Yearly</option>
  </select>
</div>

我进入我的数据库frequencyType = "1",但我想要frequencyType = NumberInt(1).

4

6 回答 6

60

有一个更简单的方法:

只需value*1用作您的 id,这会将字符串转换为 int 而不更改值...假设 id 是整数。

所以结果是>

<div ng-app ng-controller="MyCtrl">
    <select ng-model="selectedItem" ng-options="selectedItem*1 as selectedItem for selectedItem in values"></select>
    selectedItem: {{selectedItem}}
</div>

这将在更多情况下起作用,因为 indexOf 在对象中不可用,仅在数组中可用。此解决方案适用于以整数作为键的对象(例如,如果缺少某些键,或者如果您使用 db ids)

于 2014-04-25T19:18:55.577 回答
45

这里讨论的大多数解决方案都需要使用 ngOptions 指令,而不是<option>在 HTML 代码中使用静态元素,就像 OP 代码中的情况一样。

角 1.6.x

编辑如果您使用 Angular 1.6.x,只需使用ng-value指令,它将按预期工作。

angular.module('nonStringSelect', [])
.run(function($rootScope) {
  $rootScope.model = { id: 2 };
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular.min.js"></script>
<div ng-app="nonStringSelect">
  <select ng-model="model.id">
    <option ng-value="0">Zero</option>
    <option ng-value="1">One</option>
    <option ng-value="2">Two</option>
  </select>
  
  {{ model }}
</div>

旧版本

一种方法可以在仍然使用静态元素的同时使其工作。它显示在 AngularJS 选择指令文档中。

这个想法是使用指令在模型上注册解析器和格式化程序。当项目被选中时,解析器将进行字符串到整数的转换,而当模型发生变化时,格式化程序将进行整数到字符串的转换。

下面的代码(直接取自 AngularJS 文档页面,不是我的功劳)。

https://code.angularjs.org/1.4.6/docs/api/ng/directive/select#binding-select-to-a-non-string-value-via-ngmodel-parsing-formatting

angular.module('nonStringSelect', [])
.run(function($rootScope) {
  $rootScope.model = { id: 2 };
})
.directive('convertToNumber', function() {
  return {
    require: 'ngModel',
    link: function(scope, element, attrs, ngModel) {
      ngModel.$parsers.push(function(val) {
        return parseInt(val, 10);
      });
      ngModel.$formatters.push(function(val) {
        return '' + val;
      });
    }
  };
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<div ng-app="nonStringSelect">
  <select ng-model="model.id" convert-to-number>
    <option value="0">Zero</option>
    <option value="1">One</option>
    <option value="2">Two</option>
  </select>
  
  {{ model }}
</div>

于 2016-01-21T18:15:11.443 回答
33

我刚刚遇到了同样的问题,并找到了正确的方法——不需要“魔法”。:)

function MyCtrl($scope) {
    $scope.values = [
        {name : "Daily", id : 1},
        {name : "Weekly", id : 2},
        {name : "Monthly", id : 3},
        {name : "Yearly", id : 4}];
    $scope.selectedItem = $scope.values[0].id;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script>
<div ng-app ng-controller="MyCtrl">
    <select ng-model="selectedItem" ng-options="selectedItem.id as selectedItem.name for selectedItem in values"></select>
    selectedItem: {{selectedItem}}
</div>

于 2015-07-26T23:36:59.840 回答
12

我认为这样做的角度方法是在选择标签中使用指令“convert-to-number”。

<select class="span12 combobox" ng-model="frequencyType" required convert-to-number>
    <option value="1">Daily</option>
    <option value="2">Weekly</option>
    <option value="3">Monthly</option>
    <option value="4">Yearly</option>
</select>

您可以在页面末尾看到文档和小提琴:https ://docs.angularjs.org/api/ng/directive/select

于 2016-02-15T11:00:48.610 回答
11

我建议你尝试使用indexOf.

JS

function MyCtrl($scope) {
    $scope.values = ["Daily","Weekly","Monthly","Yearly"];
    $scope.selectedItem = 0;
}

HTML

<div ng-app ng-controller="MyCtrl">
    <select ng-model="selectedItem" ng-options="values.indexOf(selectedItem) as selectedItem for selectedItem in values"></select>
    selectedItem: {{selectedItem}}
</div>

演示Fiddle

所以发送到 mongoDB$scope.selectedItem

于 2013-11-06T10:49:37.070 回答
8

这是迄今为止我发现的最简单的方法:

function Controller($scope) {
    $scope.options = {
        "First option" : 1,
        "Second option" : 2,
        "Last option" : 10
    }
    $scope.myoption = 2;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app ng-controller="Controller">    
    <select ng-model="myoption" ng-options="label for (label, value) in options"></select>
    Option Selected: {{myoption}}
</div>

或者,如果您想使用数字索引:

function Controller($scope) {
    $scope.options = {
        1 : "First option",
        2 : "Second option",
        10 : "Last option"
    }
    $scope.myoption = 2;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app ng-controller="Controller">    
    <select ng-model="myoption" ng-options="value*1 as label for (value, label) in options"></select>
    Option Selected: {{myoption}}
</div>

对于 Angular 2,请遵循 rabit ...

于 2016-04-20T02:34:12.973 回答