2017-02-20 3 views
1
私はこの1つに類似の質問がたくさんある参照

内部NG-変化オプションから$インデックスを取得するが、私は私が持っている正確に何を必要とするいずれかを見つけることができませんでした:selectタグ

  1. ngRepeatを内側選択タグ

内部オプションタグ

  • ngChangeは、私が選択したオプションのインデックスを取得する必要があります。これは私のコードです

    ngClick内部のオプションタグはオプションではないので、オプションのタグはChromeとIEでは動作しません。 sg.whatはオブジェクトの配列であるため、ngRepeat(オプションタグ内)ではなくngOption(selectタグ内)はオプションではありません。また、そのため、私はindexOf関数を使用できません(ngModelはこのオブジェクトの一部のみを持ちます)。

    アイデア?

    編集: 多くの方がngOptionに切り替えるように指示していますので、これがオプションではない理由をより明確にしてください。 私はこのようなトラフ何かを反復:

    $scope.sif.what = [ 
        {SIF: 1, LABEL: "label 1", SAVED: "save me 1"}, 
        {SIF: 2, LABEL: "label 2", SAVED: "save me 2"}, 
        {SIF: 3, LABEL: "label 3", SAVED: "save me 3"}, 
    ] 
    

    は、だから私は、値としてラベル、「SIF」と「ラベル」がコンボボックスで、ngModelは「SIF」の値ですが、ngChangeに、私は、全体のオブジェクトが必要です、sif.what(インデックス)、または$ index。

    ありがとうございました。

  • +0

    を使用してインデックスにアクセスすることができます

    <select ng-model="optIndex" ng-change="getIndex()"> <option ng-repeat="opt in opts" value={{$index}}></option> <select> $scope.getIndex = function(){console.log($scope.optIndex);} 

    このログインを試すことができますが、 'てみましたng-change = "onChangeSifra( $ index) "' ??? –

    +0

    @SaurabhAgrawalインデックスはitemと同様にselectスコープ内にはありません。オプションタグ内にngRepeatがあり、selectタグ内にngChangeがあるためです。 – ljerka

    答えて

    1

    私はあなたが選択したオプションの値としてあることを入れない限り、選択した項目のインデックスをバック渡すことができるようになりますかわかりません。

    これは可能な方法です。

    var app = angular.module('app', []); 
     
    
     
    app.controller('ctrl', function($scope, $filter) { 
     
        $scope.sif = {'what': [{'SIF':'A'},{'SIF':'B'},{'SIF':'C'}]}; 
     
        $scope.onChangeSifra = function(item){ 
     
        $scope.selectedItem = $filter('filter')($scope.sif.what, {SIF : $scope.pp.sif}, true)[0]; 
     
        $scope.selectedItemIndex = $scope.sif.what.indexOf($scope.selectedItem); 
     
        } 
     
    });
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
     
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.css" /> 
     
    
     
    <body ng-app="app" ng-controller="ctrl"> 
     
        <div class="col-lg-12"> 
     
        <select data-placeholder="Choose" ng-model="pp.sif" name="sif" ng-change="onChangeSifra()"> 
     
         <option ng-repeat="item in sif.what track by $index" value="{{item.SIF}}"> 
     
          {{item.SIF}} 
     
         </option> 
     
        </select> 
     
        
     
        <p>Selected : {{pp.sif}}</p> 
     
        <p>Index : {{selectedItemIndex}}</p>  
     
        </div> 
     
    </body>

    +0

    フィルターを使用した華麗なソリューションです。私は索引を見つけるためにトラフ配列を反復しなければならなかったが、これはちょうど完璧である。ありがとうございました! :) – ljerka

    0

    ng-repeatの代わりにng-optionsを使用しようとします。

    <select data-placeholder="Choose" ng-model="pp.sif" name="sif" ng-change="onChangeSifra()" ng-options="{index: idx, item:item.SIF} as item.SIF for (idx, item) in sif.what"> 
     
    </select>

    +0

    私が言ったように、私はngOptionsを使うことはできません。私は通常それを使用しますが、この場合、オブジェクトを読み込んで繰り返し処理しなければならないので、オブジェクトの一部をラベルとして表示し、もう1つは値として表示し、ng-modelはおそらく3番目の部分。私が知っている限り、ngOptionsでそれを行うことはできません。私はあなたの問題をよりよく理解できるように私の質問を編集します。 – ljerka

    0

    観察:代わりにng-repeat使用ngOptions属性。

    array.indexOf()メソッドを使用して、選択した項目のインデックスを検索します。

    DEMO

    var myApp = angular.module('myApp',[]); 
     
    
     
    myApp.controller('MyCtrl',function($scope) { 
     
        $scope.sif = { 
     
         "what": [ 
     
         { 
     
          "SIF":1 
     
         }, 
     
         { 
     
          "SIF":2 
     
         }, 
     
         { 
     
          "SIF":3 
     
         } 
     
         ] 
     
        }; 
     
        $scope.onChangeSifra = function(selectedItem) { 
     
        console.log($scope.sif.what.indexOf(selectedItem)); 
     
        } 
     
    });
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
     
    <div ng-app="myApp" ng-controller="MyCtrl"> 
     
        <select data-placeholder="Choose" ng-model="pplsif" name="sif" ng-change="onChangeSifra(pplsif)" ng-options="item.SIF for item in sif.what"> 
     
    </select> 
     
    </div>

    +0

    私が言ったように、私はngOptionsを使用することはできません。私は通常それを使用しますが、この場合、オブジェクトを読み込んで繰り返し処理しなければならないので、オブジェクトの一部をラベルとして表示し、もう1つは値として表示し、ng-modelはおそらく3番目の部分。私が知っている限り、ngOptionsでそれを行うことはできません。また、私は配列を持っていないので、array.indexOf()関数は私にとって価値がありません。 – ljerka

    +0

    しかし、あなたの投稿 '$ scope.sif.what'は配列でしかありません。古いものを使うのではなく、あなたのコードでベストプラクティスを使ってください。 –

    +0

    これはオブジェクトの配列ですが、そのオブジェクト全体がngModelに含まれていません。そのオブジェクトのちょうど一部。したがって、array.indexOf()は動作しません。 – ljerka

    0

    あなたは今、あなたはこのsnnipet :)

    関連する問題