AngularJS - 来自控制器的过滤器逻辑工作,无法正确显示

时间:2014-05-02 15:47:01

标签: javascript angularjs

我正在尝试使用我在控制器中编写的过滤器来缩小使用ng-options的选择列表。过滤器逻辑正在运行,但结果未显示。

这是我的控制器的相关部分:

        $scope.ESGFilter = function() {
            var esg;
            var filteredESGs = [];

            // LOGIC GOES HERE TO POPULATE THE filteredESGs ARRAY

            console.log(filteredESGs);
            return filteredESGs;
        }]);

这是HTML:

    <select class="input-block-level" id="inputESG" name="inputStoch"
         ng-model="Run.ESG" 
         ng-options="econ.Id as econ.Name for econ in econData | filter:ESGFilter" size="5">
    </select>

我怀疑问题必须与HTML中的“filter:ESGFilter”...我无法弄清楚为什么我从函数返回的数组没有被显示。控制器中的功能肯定被调用,逻辑正在运行。

作为参考,console.log输出:[Object,Object] - 当我展开这些对象的属性时,我确认它们是我想要的。但是,选择列表会显示所有四个对象(我从四个数组中向下过滤)。

1 个答案:

答案 0 :(得分:2)

您的过滤器需要返回true / false语句。像这样写下你的过滤器:

$scope.ESGFilter = function(item) {
  // if you want to keep the item return true, else false
};

这是有效的,因为ngOptions接收数组中的每个项目并将其传递给过滤器函数。您的示例无法正常工作,因为它返回一个空数组,该数组将始终解析为truthy值,并且所有对象都将被接受而不会被过滤。

这是一个插件:

http://plnkr.co/edit/RfKMcXDKy1m1EGyoEpS7?p=preview