AngularJS - 在加载AJAX调用之后延迟过滤器

时间:2014-07-23 15:37:12

标签: angularjs ajax lazy-loading chaining angular-filters

我想知道如何在通过AJAX调用加载所有数据之前延迟过滤器功能。

我正在尝试过滤数据,但我无法过滤其中的一些,因为在AJAX调用之前它们没有被加载。有没有办法延迟过滤器功能,或者在加载所有数据后禁用和启用它?

更新

设置数据结构的方式是我进行AJAX调用并加载由不同用户创建的posts列表。之后,我调用另外两个AJAX调用来加载有关每个帖子的useraccount的信息。

当我为posts + user info + account info设置过滤器时,我只能过滤posts。不过,我也希望过滤useraccount信息。

我想我可以解决问题,如果我禁用过滤器,直到加载所有数据。

1 个答案:

答案 0 :(得分:1)

使用ng-model:语法将过滤器绑定到响应数据以执行此操作。例如:

<select ng-model="$root.listData" ng-include="'my_list' | filterTopTen:$root.listData" required></select>
  

只需将隐藏状态作为模型公开并将其转换为过滤器的参数,就可以将许多有状态过滤器转换为无状态过滤器。

单元测试显示在以下情况下执行过滤器:

    除非输入/参数更改

    ,否则
  • 不应调用过滤器

  • 应重新评估具有非原始输入的过滤器,当valueOf()值更改时,该原始输入支持valueOf()

  • 应始终使用不支持valueOf()的非原始输入重新评估过滤器

  • 不应重新评估支持valueOf()的非原始输入的过滤器

  • 应始终使用null原型创建的非原始输入重新评估过滤器

由于过滤器在控制器之前运行,因此请确保更新模型的控制器与绑定到视图的控制器是分开的,以避免出现竞争条件。

带有记忆的过滤器可用于避免摘要周期:

  

功能编程致力于通过在运行时中构建可重用机制来最小化移动部件。 Memoization是一种内置于编程语言中的功能,可以自动缓存重复出现的函数返回值。

     

使用memoization等功能语言功能,我可以在功能级别添加缓存,比命令式版本实现更好的结果(几乎不会改变我的代码)。功能编程消除了移动部件,使您能够集中精力解决实际问题。

<强>参考