AngularJS:缓存路由解析承诺

Fel*_*ikZ 2 routing caching resolve promise angularjs

在第一个示例代码中,所有工作都应该如此 - 在每个页面路由更改时,我们检查一些条件($timeout)并解决一个承诺:

JSFiddle Var示例代码

在第二个样本中我们移动var rulesFactoryapp.factory('rulesFactory')现在它只运行一次:

JSFiddle App Factory示例代码

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

And*_*lin 7

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

它是在第一次解决时执行此操作:

  1. Angular认为它正在寻找一些名为'rulesFactory'的东西
  2. Angular找到一个名为rulesFactory的服务.它看到没有人使用过rulesFactory,并实例化了该服务.
  3. 实例化服务rulesFactory,并在返回promise的情况下运行$ timeout

它是在第二次解决时这样做的:

  1. Angular认为它正在寻找'rulesFactory'.rulesFactory已经存在!
  2. Angular只获取rulesFactory的现有对象.
  3. 超时已经从早期用完,并且将使用相同的已解决的承诺.

解决这个问题的方法是让rulesFactory返回一个函数,它会再次运行超时 - 每次都需要它.

另外,$ timeout本身会返回一个promise,所以你只需返回$ timeout :-)

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