2

オブジェクトにバインドされた ng-options select があります。プログラムによる ng-model の設定は、文字列として設定する場合にのみ適切に機能します (選択を更新します)。ng-model を整数として設定すると、機能しません。私は本当にこの変換を行う必要はありません。これが唯一の方法ですか?

http://jsfiddle.net/HMjnV/1/

<div ng-controller="MyCtrl">
    <select ng-options="id as name for (id, name) in items" ng-model="selected"></select>
    <div>Selected ID: {{selected}} </div>
    <button ng-click="setSelected(1)">Set Selected to ID 1 as Integer</button>
    <button ng-click="setSelected('1')">Set Selected to ID 1 as String</button>
    <div>Programmatically setting the ng-model as string sets the dropdown but not as integer.</div>
</div>

var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
    $scope.items = {1: 'a', 2: 'b', 3:'c'};
    $scope.selected = null;

    $scope.setSelected = function(id) {
        $scope.selected = id; 
    }
}
4

4 に答える 4

4

編集済み

toString迅速で汚い解決策を探している場合は、プログラムでモデル値を設定するときに使用してみてください。問題の核心について詳しくは、@ExpertSystems の回答を参照してください。

$scope.setSelected = function(id) {
    $scope.selected = id.toString(); 
}
于 2014-05-09T05:08:45.203 に答える
3

これは奇妙ですが、内包表記でキャストを強制的に発生させることで、との間のバインディングを機能させることができます。ng-optionsng-model

ng-options="id*1 as name for (id, name) in items" 

これは、このトリックを示すフィドルのフォークです: http://jsfiddle.net/wittwerj/HMjnV/9/

そうは言っても、私はコントローラーで toString に変換する Marc のアプローチを好みます。

于 2014-05-09T05:45:37.437 に答える
0

JSオブジェクトには、プロパティの名前と値のペアがあります。
value任意の型にすることができますが、name常に文字列です。
数値として定義したと思いきや、自動的に文字列に変換されます。これを変更する方法はありません (つまり、多数のプロパティ名を持つオブジェクトを作成します)。

于 2014-05-09T05:31:42.193 に答える