web-dev-qa-db-ja.com

Angular JSを使用してドロップダウンリストコントロールロールの選択オプションを設定する方法

私はAngularJSを使用しており、Angular JSを使用してドロップダウンリストコントロールの選択オプションを設定する必要があります。これがばかげている場合はご容赦くださいがAngular JSが初めてです

これが私のHTMLのドロップダウンリストコントロールです。

 <select ng-required="item.id==8 && item.quantity > 0" name="posterVariants"
   ng-show="item.id==8" ng-model="item.selectedVariant" 
   ng-change="calculateServicesSubTotal(item)"
   ng-options="v.name for v in variants | filter:{type:2}">
  </select>

人口が増えた後に

 <select ng-options="v.name for v in variants | filter:{type:2}" ng-change="calculateServicesSubTotal(item)"
ng-model="item.selectedVariant" ng-show="item.id==8" name="posterVariants"
ng-required="item.id==8 &amp;&amp; item.quantity &gt; 0" class="ng-pristine ng-valid ng-valid-required">
    <option value="?" selected="selected"></option>
    <option value="0">set of 6 traits</option>
    <option value="1">5 complete sets</option>
</select>

value="0"のコントロールを選択するにはどうすればいいですか?

135
themis

私はあなたの質問を理解していると思いますが、ng-modelディレクティブはコントロール内の選択された項目とitem.selectedVariantの値の間に双方向のバインディングを作成します。つまり、JavaScriptでitem.selectedVariantを変更するか、コントロール内の値を変更すると、もう一方も更新されます。 item.selectedVariantの値が0の場合、その項目は選択されているはずです。

variantsがオブジェクトの配列の場合、item.selectedVariantはそれらのオブジェクトの1つに設定されなければなりません。私はあなたがあなたの範囲内にある情報を知りませんが、ここに例があります:

JS:

$scope.options = [{ name: "a", id: 1 }, { name: "b", id: 2 }];
$scope.selectedOption = $scope.options[1];

HTML:

<select data-ng-options="o.name for o in options" data-ng-model="selectedOption"></select>

これにより、 "b"項目が選択されたままになります。

188
Steve Klösters

これが誰かに役立つかどうかはわかりませんが、同じ問題に直面していたので、解決策を共有することを考えました。

ng-options track by attributeを使うことができます。

あなたが持っていると仮定します。

variants:[{'id':0, name:'set of 6 traits'}, {'id':1, name:'5 complete sets'}]

あなたのng-optionsを次のように挙げることができます。

ng-options="v.name for v in variants track by v.id"

これが将来誰かに役立つことを願っています。

33
jsmtslch

item.selectedVariantに値0を代入すると自動的に選択されます。 http://docs.angularjs.org/api/ng.directive:select にあるサンプルをチェックしてください。デフォルトでは、単に$scope.color='red'を代入して赤色を選択しています。

7
Tadeusz Wójcik

私はここですでに良い答えを書いているのを見ます、しかしいつか他の形で同じことを書くことは役に立ちます

<div ng-app ng-controller="MyCtrl">
  <select ng-model="referral.organization" ng-options="c for c in organizations"></select>
</div>

<script type='text/javascript'>
  function MyCtrl($scope) {
    $scope.organizations = ['a', 'b', 'c', 'd', 'e'];
    $scope.referral = {
      organization: $scope.organizations[2]
    };
  }
</script>
7
Arthur

簡単な方法

あなたがレスポンスとしてUsersまたはあなたが定義したArray/JSONを持っているなら、最初にあなたはコントローラに選択された値を設定する必要があります、そしてあなたはhtmlに同じモデル名を入れます。この例は私が最も簡単な方法で説明するために書きました。
簡単な例
コントローラー内部:

$scope.Users = ["Suresh","Mahesh","Ramesh"]; 
$scope.selectedUser = $scope.Users[0];

あなたのHTML

<select data-ng-options="usr for usr in Users" data-ng-model="selectedUser">
</select>

複雑な例
コントローラー内部:

$scope.JSON = {
       "ResponseObject":
           [{
               "Name": "Suresh",
               "userID": 1
           },
           {
               "Name": "Mahesh",
               "userID": 2
           }]
   };
   $scope.selectedUser = $scope.JSON.ResponseObject[0];

あなたのHTML

<select data-ng-options="usr.Name for usr in JSON.ResponseObject" data-ng-model="selectedUser"></select>
<h3>You selected: {{selectedUser.Name}}</h3>    
1
shreedhar bhat

それは便利です。結合はいつもうまくいくとは限らない。

<select id="product" class="form-control" name="product" required
        ng-model="issue.productId"
        ng-change="getProductVersions()"
        ng-options="p.id as p.shortName for p in products">
</select>

例えば。 rest-serviceからオプションリストのソースモデルを埋めます。選択された値はリストを埋めるために知られていて設定されました。 $ http listオプションでrest-requestを実行した後に行われます。しかし選択されたオプションは設定されていません。不明な理由により、shadow $ digestを実行中のAngularJSがバインドされていないはずです。私はJQueryを使用して選択を設定します。それは重要です! shadowのAngularは、ng-repeatオプティノによって生成されるattr "value"の値にプレフィックスを追加します。 intの場合は "number:"です。

$scope.issue.productId = productId;
function activate() {
   $http.get('/product/list')
     .then(function (response) {
       $scope.products = response.data;

       if (productId) {
           console.log("" + $("#product option").length);//for clarity                       
           $timeout(function () {
               console.log("" + $("#product option").length);//for clarity
               $('#product').val('number:'+productId);
               //$scope.issue.productId = productId;//not work at all
           }, 200);
       }
   });
}
0
trueboroda

以下を試してください。

JSファイル

this.options = { 
        languages: [{language: 'English', lg:'en'}, {language:'German', lg:'de'}]
};
console.log(signinDetails.language);

HTMLファイル

<div class="form-group col-sm-6">
    <label>Preferred language</label>
    <select class="form-control" name="right" ng-model="signinDetails.language" ng-init="signinDetails.language = options.languages[0]" ng-options="l as l.language for l in options.languages"><option></option>
    </select>
</div>
0
Asha Joshi