当前位置: 首页 > 知识库问答 >
问题:

通过单向绑定的过滤功能,在自定义角度下拉列表中提高角度性能

钱远
2023-03-14

我有一个自定义角度组件,用作具有过滤功能的下拉选择元素。输入是具有几个角度指令的基本输入元素:

 <input type="text" class="form-control" ng-change="ctrl.filterTextChangeLocal($event)" ng-model="ctrl.ngModelValue" ng-click="ctrl.openDropdown($event)" />

上述输入负责打开下拉列表并允许用户键入,因为用户键入下拉列表元素中的数据会相应过滤。使用基本角度滤波器在控制器中进行滤波:

 ctrl.filteredItems = ctrl.$filter("filter")(ctrl.items, ctrl.ngModelValue);

下拉元素如下所示:

 <table class="table">
        <thead>
            <tr>
                <th ng-repeat="heading in ctrl.gridColumnHeaders" class="text-center">{{heading}}</th>
            </tr>
        </thead>
        <tbody>
            <tr ng-repeat="row in ctrl.filteredItems" ng-mousedown="ctrl.onSelectedLocal(row, $event)">
                <td ng-repeat="value in ctrl.sort(row) track by $index" class="text-center">
                    {{value}}
                </td>
            </tr>
        </tbody>
    </table>

所有工作正常,但是随着传递到组件中的项目数量的增加(100个项目)和下拉列表的相应增加,过滤速度很慢。这意味着当我键入一个字符时,下拉列表的过滤会滞后。

我知道角度滤波器的性能并不是最好的,但我相信大部分延迟来自ng重复和双向绑定。我无法在ng内部创建单向绑定,请重复以下内容:

  ng-repeat="value in ::ctrl.filteredItems" 

因为我失去了过滤的绑定。将只在值上设置单向绑定以提高性能:

  {{::value}}

或者,提高性能的最佳方法是什么?确实需要尝试并保持在角度框架中,以便寻找角度解决方案

谢谢

共有1个答案

虞正业
2023-03-14

您是否尝试过简单地应用:

one-time-binding="true"

直接在ng上重复?

通常,对100个元素进行双向绑定不会影响性能,但如果循环中有嵌套循环,则。。

 类似资料:
  • 我正在从事一个项目,该项目在很大程度上依赖angular来完成前端任务。在一个显示了大约50个带有ng repeat的条目的列表页面上,每个条目都有大量的观察者,因此我决定使用angular的静态绑定减少观察者的数量,并能够将数量从12k观察者减少到8k观察者,但即使在观察者数量大幅减少之后,加载时间、dom呈现或摘要周期时间也没有改善。digest cyle使用8k观察程序所需的时间与使用12k

  • 我有完全合法的数据来源: 我将其显示在这样的表中: 现在假设我想过滤我的数组。如果我有固定的行数,我可以在< code>tr元素上使用< code>*ngIf来选择显示/不显示一个项目,但是Angular不允许在一个元素上有两个结构指令。 我知道我可以使用< code>Array.filter简单地过滤源数组,但是这样会产生一个副本,如果我的数组大得多,这可能会成为一个问题。 我想将该行嵌套在某个

  • 问题内容: 我有一个带有一系列对象属性的对象,这些对象属性具有以下相似的结构(这是从服务返回数据的方式): 当我执行ng-repeat时,我可以遍历所有这5个对象,例如: 但是, 我真正想要做的是仅对那些不是“ foo”类型的项进行迭代 ,即3次迭代而不是5次。我知道可以以某种方式利用过滤器来执行此操作,但是我不确定如何执行。我尝试了以下方法: 但这不起作用。实际上,即使执行以下操作以将对象限制为

  • 问题内容: 在我的控制器内部,我想过滤一个对象数组。每个对象都是一个映射,可以包含字符串和列表 我尝试使用格式,但是我不知道如何在函数中访问数组的各个元素。这是显示我想要的内容的摘要。 然后在中,我将检查每个单个属性是否匹配 我必须在控制器中完成所有这些操作,并编译一个列表列表,然后在范围内进行设置。因此,我只需要以这种方式访问。到目前为止,我在网上发现的所有示例都在函数内部进行了静态条件搜索,它

  • 问题内容: 有没有什么好方法可以使用angular过滤列表而不使用ng- repeat?我不想首先使用javascript绘制列表,但是之后我想使用angular对其进行过滤。 例: 我想使用搜索框来过滤现有的html。 (一般请不要使用ng-repeat或jQuery给出任何示例) 问题答案: 您可以编写一个简单的指令来处理显示/隐藏: 并以这种方式使用它: 使用指令有两个好处: 1)。您不必在

  • 我用角2,我创建一个甜甜圈图 组件的html 我想要的是将这些值作为主组件的输入进行传递。因此,假设在html上,我将该组件称为: 主HTML 组成部分js代码 因此,我的问题是如何将这些输入传递到组件的html中。