javascript - AngularJS:带有过滤器和 ng-change 的 ng-options

标签 javascript angularjs

我有一个带有过滤器的选择器来格式化显示文本,我需要将所选值传递给 Controller ​​,但我想传递所选项目的“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() : '';
            }
        })

在我添加此过滤器之前,它会将所有对象传递给 Controller ​​。现在,它正在传递“q.name”(标签)。如何传递所选对象的 ID?

谢谢!

最佳答案

我相信您需要将 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看看这是否是您想要的。

关于javascript - AngularJS:带有过滤器和 ng-change 的 ng-options,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42822410/

相关文章:

javascript - 如何测试使用 setTimeout 调用另一个 Action 的异步 Action 创建者

javascript - 禁用 DFP/DoubleClick iFrame

javascript - 在属性中显示 react 组件名称

javascript - 自定义 Google 图表甘特图工具提示

javascript - 我不明白这段 JS 代码是如何工作的;这两行是如何返回的?

javascript - Angular Directive(指令) : Is there a better way than '$timeout' to get info about DOM elements created in "compile" function?

Angularjs - 设置 View 值不更新显示

angularjs - MEAN 堆栈如何处理登录和重定向

javascript - 如何忽略文本Angular编辑器中的图像

javascript - angularjs 使用 $http.post 到 PHP 但得到空数组