39

これは私の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)

4

6 に答える 6

60

もっと簡単な方法があります:

IDとして使用するだけvalue*1で、値を変更せずに文字列を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 はオブジェクトでは使用できず、配列でのみ使用できるため、これはより多くの場合に機能します。このソリューションは、キーとして整数を持つオブジェクトに対して機能します (たとえば、一部のキーが欠落している場合、またはデータベース ID を使用している場合)。

于 2014-04-25T19:18:55.577 に答える
45

<option>ここで説明するほとんどのソリューションでは、OP のコードの場合のように、HTML コードで静的要素を使用する代わりに ngOptions ディレクティブを使用する必要があります。

角度 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 選択ディレクティブのドキュメントに示されています。

アイデアは、ディレクティブを使用してパーサーとフォーマッターをモデルに登録することです。項目が選択されると、パーサーは文字列から int への変換を行いますが、モデルが変更されると、フォーマッターは int から文字列への変換を行います。

以下のコード (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 に答える
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 に答える