2014-07-23 54 views
2

我想知道如何延迟过滤功能,直到通过AJAX调用加载所有数据。AngularJS - 延迟过滤器直到加载AJAX调用

我试图过滤数据,但我不能过滤其中的一些,因为它们没有加载,直到AJAX调用。有没有办法延迟过滤功能,或者在所有数据加载后禁用并启用它?

更新

,数据结构设置的方式是,我做一个AJAX调用并加载不同的用户做出的posts列表。之后,我打电话给另外两个AJAX呼叫,以加载关于每个帖子的useraccount的信息。

当我为posts + user info + account info设置过滤器时,我只能通过posts进行过滤。但是,我想通过useraccount信息进行筛选。

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

+0

我要补充一些示例代码,但我甚至不知道从哪里开始。我只想知道是否有可能延迟或启用/禁用过滤器,直到一切都加载。 – wag0325

+0

你能详细解释一下......如果数据没有加载,你想过滤什么? – harishr

+0

通过禁用过滤器,你想显示所有的帖子,直到用户/帐户信息加载,或其他方式? – runTarm

回答

1

使用ng-model加上:语法将筛选器绑定到响应数据来执行此操作。例如:

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

许多状态的过滤器可以只通过暴露隐藏的状态作为模型,使之成为用于滤波器的参数被转换成无状态过滤器。

单元测试表明,过滤器在下列情况下:

  • 除非输入/参数改变

  • 应该重新评估过滤器与非原始输入,做不应该调用过滤器当valueOf()值变化时支持valueOf()

  • 应该总是重新评估具有非原始i NPUT不支持valueOf()

  • 不应该重新评估与非原始输入的是不支持valueOf()

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

由于过滤器在控制器之前运行,请确保更新模型的控制器与绑定到视图的控制器分开以避免竞争状况。

与记忆化

可以使用过滤器,以避免消化周期:

函数编程努力最小化由构建可重用机制到运行时的移动部件。Memoization是一种内置于编程语言中的功能,可以自动缓存循环函数返回值。

使用像memoization这样的功能语言功能,我可以在功能级别添加缓存,实现比命令式更好的结果(几乎不会改变我的代码)。功能编程消除了运动部件,让您专注于解决实际问题。

参考