AngularJS:带过滤和ng变化的ng-options

时间:2017-03-15 23:08:47

标签: javascript angularjs

我有一个选择过滤器来格式化显示文本,我需要将所选值传递给控制器​​,但我想传递所选项目的“id”:

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

谢谢!

1 个答案:

答案 0 :(得分: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,看看您是否想要这些。