2017-03-15 105 views
1

我有一個選擇與過濾器來格式化顯示文本,我需要將選定的值傳遞給控制器​​,但我想通過所選項目的「id」 :AngularJS:具有過濾器和ng變化的ng選項

<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

是啊!它的工作;)謝謝! –