2017-03-15 13 views
1

私は、表示テキストをフォーマットするフィルタを持つ選択を持っています。選択した値をコントローラに渡す必要がありますが、選択した項目の "id" :AngularJS:ng-options with filter and ng-change

<select 
       ng-model="my_field" 
       ng-options="q.name as (q.name | filter1 | filter2) for q in my_fields track by q.id" 
       ng-change="controllerMethod(my_field)" 
       required> 
       </select> 

// Controller 
    function controllerMethod(selected_field){ 
     console.log(selected_field); 
    } 
    $scope.controllerMethod = controllerMethod; 


// Filters 
    angular.module('app') 
     .filter('filter1', function(){ 
      return function(str_value) { 
       return str_value ? str_value.split('_').join(' ') : ""; 
      } 
     }) 

     .filter('filter2', function(){ 
      return function(str_value) { 
       return (!!str_value) ? str_value.charAt(0).toUpperCase() + str_value.substr(1).toLowerCase() : ''; 
      } 
     }) 

このフィルタを追加する前に、すべてのオブジェクトをコントローラに渡していました。今、それは "q.name"(ラベル)を渡しています。選択したオブジェクトのIDをどのように渡すことができますか?

ありがとうございます!

+0

フィルタとコントローラを追加してください。 – lin

+0

@lin okコードを追加しました –

答えて

2

私はあなたが以下にごng-optionsを変更する必要があると考えている:

ng-options="q as (q.name | filter1 | filter2) for q in my_fields track by q.id" 

あなたはあなたが設定した方法では、track by式が不定となりますq.name.idに評価されます。私が上に追加したコードは、あなたが後にしていると信じているq.idと評価されるべきです。 this jsfiddleをチェックして、それがあなたが望んでいるものかどうかを確認してください。

+0

うん!それは働いた;)ありがとう! –