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


139

Angular JSを使用していて、ドロップダウンリストコントロールの選択したオプションを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"選択するように設定するにはどうすればよいですか?


5
<option value="0" ng-selected="true">set of 6 traits</option>
Muhammad Shahzad

回答:


191

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

場合はvariants、オブジェクトの配列である、item.selectedVariantそれらのオブジェクトのいずれかに設定する必要があります。範囲内にどのような情報があるかはわかりませんが、以下に例を示します。

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」アイテムが選択されたままになります。


私はorder.jsという名前のコントローラーファイルを持っているので、htmlの名前は、コントロールと同じorder.htmlです。selectedVariantをそこに設定する必要がありますか、それとも直接コントロールに設定しますか?
themhz 2013

通常は、これらをコントローラーの$scope変数に設定します。したがって、単一のスコープにいると仮定すると$scope.item.selectedVariant = 0、コントローラーでと言うことができ、デフォルトの選択値を設定します。ng-initディレクティブを使用して、HTMLでコントロールに変数を直接設定することもできますが、それは私の意見ではかなり面倒になります!
SteveKlösters2013

variants自分の対象範囲について詳しく教えてください。のitem.selectedVariant項目に正確に設定する必要がありますvariants
SteveKlösters2013

$ scope.item.selectedVariant = 0; 私はのcontrolerファイルにそれを置く場合は、このページを分割します
themhz

ng-initを使用して構文を提供できますか?
themhz 2013

34

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

の属性別トラックを使用できますng-options

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

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"

これが将来誰かを助けることを願っています。


はい!最後に!ありがとう
davaus

すごい。これを動的に行うために、トラックを逃していました。
ジョン

最後に!私の問題はトラックを置くことで解決しました。ありがとう
Kishan 2018年

これは私が欠けていたものです!ngModel適切にバインドされたスコープフィールドを設定していましたが、track by!を追加するまで機能しませんでした。ありがとうございました!
シンディK.

7

値0を割り当てると、item.selectedVariant自動的に選択されます。http://docs.angularjs.org/api/ng.directive:selectのサンプルを確認してください$scope.color='red'。これは、を割り当てるだけでデフォルトで赤色を選択します。


item.selectedVariantはどこに設定しますか?$ scope.item.selectedVariant = 0を定義すると、ファイルの
コントローラーで

3
一致するhtmlを貼り付けることもできますか?
TadeuszWójcik2013

私はorderGridの各項目は0にselectedVariantセットを持つことが必要だと思います
タデウシュWójcikを

サンプルコードを提供できますか?私は角度の申し訳ありませんがよく知らない
それらは2013

7

私はここですでに良い答えを書いたと思いますが、他の形で同じことを書くのが役立つこともあります

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

複数選択のドロップダウンがある場合はどうなりますか?モデルにIDを設定するだけでは機能しません
Nikhil Sahu

2

簡単な方法

応答としてのユーザーまたは定義した配列/ 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

それは役に立ちます。バインディングは常に機能するとは限りません。

<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リストオプションを指定してrest-requestを実行した後、実行します。ただし、選択したオプションが設定されていません。未知の理由により、シャドウ$ digestのAngularJSはバインドされているはずのバインドを選択していません。JQueryを使用して選択を設定する必要があります。重要です!影の角度は、ng-repeat optinosによって生成された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

以下を試してください:

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>

すでに有効な解決策があり、それは機能し、OPが彼の問題を解決することを認めています。
L.ガタール

0

これは、選択した設定値に使用したコードです

countryList: any = [{ "value": "AF", "group": "A", "text": "Afghanistan"}, { "value": "AL", "group": "A", "text": "Albania"}, { "value": "DZ", "group": "A", "text": "Algeria"}, { "value": "AD", "group": "A", "text": "Andorra"}, { "value": "AO", "group": "A", "text": "Angola"}, { "value": "AR", "group": "A", "text": "Argentina"}, { "value": "AM", "group": "A", "text": "Armenia"}, { "value": "AW", "group": "A", "text": "Aruba"}, { "value": "AU", "group": "A", "text": "Australia"}, { "value": "AT", "group": "A", "text": "Austria"}, { "value": "AZ", "group": "A", "text": "Azerbaijan"}];
 
 
 for (var j = 0; j < countryList.length; j++) {
      //debugger
      if (countryList[j].text == "Australia") {
          console.log(countryList[j].text); 
          countryList[j].isSelected = 'selected';
      }
      }
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<label>Country</label>
<select class="custom-select col-12" id="Country" name="Country"   >
<option value="0" selected>Choose...</option>
<option *ngFor="let country of countryList" value="{{country.text}}" selected="{{country.isSelected}}"   > {{country.text}}</option>
</select>

角度のあるフレームワークでこれを試してください


0

JS:

$scope.options = [
  {
    name: "a", 
    id: 1 
  },
  {
    name: "b",
    id: 2 
  }
];
$scope.selectedOption = $scope.options[1];
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.