gpt4 book ai didi

javascript - 使用 Angular $filter 服务就地过滤列表

转载 作者:行者123 更新时间:2023-12-02 16:32:31 25 4
gpt4 key购买 nike

我有几个工作正常的过滤器,到目前为止我仅通过 HTML 模板中的管道使用它们。现在,我有一个用例,我想在指令的 Controller 中进行相同类型的过滤。

我知道我可以使用 Angular $filter 服务来访问过滤器,使用

var filtered = $filter('myFilter')(unfiltered);

但我的用例要求列表被过滤就地,即我无法重新绑定(bind)变量(以免我会失去与相同变量可能存在的其他位置的绑定(bind)使用)。

我在the official docs中找不到任何关于此的信息。 ,但我还不想放弃希望 =)

最佳答案

我认为您正在描述一种情况,其中替换子作用域、父作用域或同级作用域中的整个数组(或对象)会丢失与数组的连接。发生这种情况是由于范围继承的本质。如果您有一个作用域,则在该作用域上放置一个数组,然后有两个子作用域,并替换其中一个子作用域上的数组,那么另一个子作用域和父作用域将“松开连接”。有几种方法可以解决这个问题。这里有一些:

  1. 用父作用域上的对象包装数组。然后通过该对象引用子作用域中的数组。如果这样做,您可以更改整个数组,并且所有 Controller 仍将引用同一数组。

而不是:$scope.someArr

use: $scope.wrapper = {
someArr: SomeArr
}

然后:在子作用域引用上:$childScope.wrapper.someArr

  • 您可以修改原始数组。过滤到一个新数组中,然后将参数连接到一个数组中,并应用拼接:
  • 示例代码:

    //originalArr
    var newArr// = new filtered array
    var args = [0, originalArr.length].concat(newArr);
    originalArr.splice.apply(this, args);

    此代码仅是概念性的,尚未经过测试。这个想法是 splice 处理原始数组,并且所有范围上对数组的引用保持不变。

    关于javascript - 使用 Angular $filter 服务就地过滤列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28173422/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com