【问题标题】:How to clear the md-autocomplete cache?如何清除 md-autocomplete 缓存?
【发布时间】:2015-10-31 20:15:18
【问题描述】:

我正在使用md-autocomplete 来显示 api 查询的结果。属性 md-items 正在迭代一个承诺:item in getItems(searchText)

这很好用,并且使用缓存后续使用相同的搜索文本会立即返回相同的结果。

但是当其他搜索参数发生变化时,我需要能够在某些时候清除缓存。我怎样才能做到这一点?也许通过访问 md-autocomplete 控制器?虽然这看起来不标准,我不确定如何。

【问题讨论】:

    标签: angularjs autocomplete angular-material


    【解决方案1】:

    从 Angular-material 的 1.0.5 版开始,这是不可能的。我没有找到任何可接受的解决方法,所以我只是用md-no-cache="true" 禁用缓存。

    我已经 logged an issue for this 参与了 angular-material 项目,包括关于它如何工作的建议。

    【讨论】:

    • 谢谢,为我工作。我根据用户输入将不同的列表加载到 md-autocomplete 组件中,并且旧值与新值一起存储。关闭缓存会释放所有旧值。
    • 现在有这方面的消息吗?
    • 我提交的问题已关闭,因为它不够核心。令人失望,但我已经能够通过保持 md-no-cache="true" 并添加我们自己的缓存层来解决它。 md-items 表达式可以采用如下函数:md-items="item in getItems(searchText)"。
    【解决方案2】:

    绝对可以随时在您的md-autocomplete 指令上以编程方式重置md-no-cache 属性。

    如果你的控制器上有一个布尔变量,假设:

    $scope.noCacheResults = false;
    

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

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

    这样,每当您的搜索参数发生变化时,您都可以将$scope.noCacheResults 设置为truefalse,具体取决于您是否要继续缓存查询结果。

    【讨论】:

    • 这不能回答问题。当您从 false 变为 true 但从 true 变为 false 时,它​​可能会起作用,它会将旧结果保存在缓存中。作为一种解决方法,我禁用了缓存 md-no-cache="true"
    【解决方案3】:

    对我有用的东西。在你的自动完成上放一个 ng-if。然后,在更改影响该字段的其他字段的值的代码中,将该值设置为 false,然后在超时内再次将其设置为 true。这将有效地从 DOM 中删除该项目并将其放回原处,并且没有缓存。

    【讨论】:

    • 这是一个糟糕的解决方案!来吧?
    猜你喜欢
    • 2015-08-08
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2011-05-10
    • 2011-11-04
    • 2017-02-11
    相关资源
    最近更新 更多