我想知道如何在通过AJAX调用加载所有数据之前延迟过滤器功能。
我正在尝试过滤数据,但我无法过滤其中的一些,因为在AJAX调用之前它们没有被加载。有没有办法延迟过滤器功能,或者在加载所有数据后禁用和启用它?
更新
设置数据结构的方式是我进行AJAX调用并加载由不同用户创建的posts
列表。之后,我调用另外两个AJAX调用来加载有关每个帖子的user
和account
的信息。
当我为posts + user info + account info
设置过滤器时,我只能过滤posts
。不过,我也希望过滤user
和account
信息。
我想我可以解决问题,如果我禁用过滤器,直到加载所有数据。
答案 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等功能语言功能,我可以在功能级别添加缓存,比命令式版本实现更好的结果(几乎不会改变我的代码)。功能编程消除了移动部件,使您能够集中精力解决实际问题。
<强>参考强>