2017-03-15 74 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

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