Подтвердить что ты не робот

Ng-select дает только строку, но я хочу целое число

Это мой код файла angular 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).

4b9b3361

Ответ 1

Я предлагаю вам попробовать использовать 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 значение

Ответ 2

Существует более простой способ:

Просто используйте 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)

Ответ 3

У меня была одна и та же проблема, и я понял правильный способ сделать это - не требуется "волшебство".:)

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>

Ответ 4

Большинство обсуждаемых здесь решений требуют использования директивы ngOptions вместо использования статических элементов <option> в HTML-коде, как это было в OP-коде.

Angular 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>

Ответ 5

Я думаю, что способ angular сделать это - использовать директиву "convert-to-number" в теге select.

<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

Ответ 6

Это самый простой способ, который я нашел до сих пор:

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>