如何清除md-autocomplete缓存?

10
我正在使用md-autocomplete显示API查询结果。 属性md-items正在迭代一个承诺:item in getItems(searchText)
这个工作得很好,并且在使用相同的搜索文本的情况下,使用缓存会立即返回相同的结果。
但是我需要能够在某些点上清除缓存,当其他搜索参数更改时。 我该怎么做? 也许通过访问md-autocomplete控制器? 尽管这似乎不是标准的,而且我不确定该如何操作。
3个回答

12
截至Angular Material 1.0.5版本,这是无法实现的。我没有找到任何可接受的解决方法,因此我只能使用“md-no-cache = true”禁用缓存。 我已经在Angular Material项目上记录了这个问题,并提出了一个可能实现的建议。

谢谢,对我有用。我正在根据用户输入将不同的列表加载到md-autocomplete组件中,旧值与新值一起存储。关闭缓存释放了所有旧值。 - President Camacho
现在有任何消息吗? - tymtam
1
我提交的问题被关闭了,因为它不被认为是核心问题。这让人失望,但我已经通过保持md-no-cache="true"并添加自己的缓存层来解决了它。md-items表达式可以接受一个函数,例如:md-items="item in getItems(searchText)"。 - Justin Caldicott

2

在您的md-autocomplete指令上,随时以编程方式重置md-no-cache属性是完全可能的。

如果您在控制器上有一个布尔变量,例如:

$scope.noCacheResults = false;

然后在您的指令中,您可以将此变量绑定到 md-no-cache 属性:

<md-autocomplete ...
                 md-no-cache="noCacheResults">
</md-autocomplete>

像这样,每当您的搜索参数更改时,您可以将$scope.noCacheResults设置为truefalse,具体取决于您是否希望继续缓存查询结果。


3
那并没有回答问题。当你从假变成真时它可能有效,但是当你从真变成假时,它会在缓存中保留旧结果。为了解决这个问题,我禁用了缓存 md-no-cache="true" - Guillaume

-1

对我有用的方法是,在自动完成上放置一个ng-if。然后,在更改影响此字段的其他字段的值的代码中,将该值设置为false,然后在超时内再次将其设置为true。这将有效地从DOM中删除该项,并将其重新放回,没有缓存,一切都很好。


这是一个非常糟糕的解决方案!得了吧? - Muhammad bin Yusrat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接