javascript - 为什么 Angular 重复过滤器只能访问返回函数中的元素

标签 javascript angularjs typescript

我有一些 Angular 代码,我已经开始工作了,但我不明白为什么 - 来自 C Sharp 背景,并且是 JS 和 Typescript 的新手。

<tr ng-repeat="colleague in Model.FilteredColleagueListModel | filter:Model.searchText(Model.SearchCriteria)" >

    public searchText(searchCriteria)
    {

        return function (item) {
            if (item.DisplayName.indexOf(searchCriteria) > -1 
            {
                return true;
            }
            return false;
        }  

    };

我有一个过滤器,但我不明白的是嵌套函数。为什么 item 只能在 return 函数中使用。返回函数也是 TypeScript 中执行此操作的正确方法吗?可以问这样稍微开放式的问题吗?

最佳答案

您使用的模式是有状态过滤器(不鼓励 https://docs.angularjs.org/api/ng/filter/filter )

It is strongly discouraged to write filters that are stateful, because the execution of those can't be optimized by Angular, which often leads to performance issues. Many stateful filters can be converted into stateless filters just by exposing the hidden state as a model and turning it into an argument for the filter.

您应该考虑将 searchCriteria 作为返回函数的参数。那么语法将类似于 filter:Model.searchText:Model.SearchCriteria

public searchText()
{

    return function (item, searchCriteria) {
        if (item.DisplayName.indexOf(searchCriteria) > -1 
        {
            return true;
        }
        return false;
    }  

};

关于javascript - 为什么 Angular 重复过滤器只能访问返回函数中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34130903/

相关文章:

typescript - 配置 Visual Studio 2015,使 Typescript 虚拟项目永远不会创建 'loose files'

javascript - 如何使用 JavaScript 模拟 x86 无符号 32 位整数乘法?

javascript - Angularjs 和谷歌地图 API 地理定位

javascript - 使用 Lambda 查询 DynamoDB 没有任何作用

java - 在 Java Web 应用程序中使用 AngularJS 显示后端数据

typescript - 定义具有可选的第一个和最后一个元素的元组列表

javascript - 如何使用 PHP 中的 ID 数组从 mysql 表中删除多行

angularjs - 名称为 ='' 的无效表单控件无法聚焦在隐藏元素上

javascript - 如何在 ng-repeat angularJS 内的 $scope 中赋值

typescript - 类型 'render' 上不存在属性 'typeof __React'