【问题标题】:AngularJS: route resolve promise is cachedAngularJS:路由解析承诺被缓存
【发布时间】:2013-05-21 18:32:58
【问题描述】:

在第一个示例代码中,所有内容都按原样工作 - 在每次页面路由更改时,我们都会检查一些条件 ($timeout) 并解决一个承诺:

JSFiddle Var sample code

在第二个示例中,我们将var rulesFactory 移动到app.factory('rulesFactory'),现在它可以工作一次:

JSFiddle App Factory sample code

是缓存吗?如何解决这个问题以提高代码的可重用性?

【问题讨论】:

标签: caching angularjs routing promise resolve


【解决方案1】:

rulesFactory 中的代码只运行过一次 - 第一次实例化服务本身。

它在第一次解析时这样做:

  1. Angular 发现它正在寻找可以注入的东西,称为“rulesFactory”
  2. Angular 找到了一个名为 rulesFactory 的服务。它发现没有人使用 rulesFactory,然后实例化服务。
  3. 服务 rulesFactory 被实例化,运行 $timeout 并返回一个承诺

它在第二次解析时这样做:

  1. Angular 发现它正在寻找“rulesFactory”。 rulesFactory 已经存在!
  2. Angular 只是获取 rulesFactory 的现有对象。
  3. 之前的超时时间已经用完,将使用相同的已解决承诺。

解决此问题的方法是让 rulesFactory 返回一个函数,该函数将再次运行超时 - 每次您需要时。

另外,$timeout 本身返回一个承诺,所以你可以只返回一个 $timeout :-)

http://jsfiddle.net/JbTkp/4/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多