如何延迟工厂的实例化

时间:2015-05-13 05:54:25

标签: angularjs ionic-framework ionic

我想定义一个简单的工厂,它将成为我应用中给定资源的$resource定义的入口点(比如Post)。问题是Post的URL取决于用户的组织,因此在用户登录之前实例化Post类是没有意义的(甚至也不可能)(例如,像https://host.com/organizations/your-org/posts/:id

这样的网址

依赖Post的控制器都受登录保护,因此假设用户已经登录,理论上应该可以定义Post

但是我发现任何控制器签名中的简单需要Post在引导时初始化Post工厂。

angular.module('myapp.services', [])
.factory("Post", function($resource, Auth, $localStorage){
  return $resource(Auth.links.posts.href, {id: "@id"});
});

Auth.links在登录后初始化,因此在用户注销时引导应用程序会导致错误,因为Auth.links为空。

我想到了两种方法来处理这个问题,我对此并不感兴趣:

  1. 重写Post工厂以返回一个承诺,假设您已登录,该承诺将立即得到解决。但为什么要创建另一个回调呢?
  2. 将初始Post工厂设为存根,然后修改Auth.login()方法,使其以正确的定义覆盖Post工厂。这似乎是hacky和非标准的,我read that trying to add services or factories after the app has been bootstrapped doesn't work properly (without some hacks)
  3. 之前有没有人解决过类似的问题?和/或你推荐一些特别的方法吗?提前谢谢。

    编辑:

    显然,SOOOO在我的路由器中有一个if语句错误,它将登出的用户默认为登录页面,这导致了整个混乱。 事实证明, 实际上是如何工作的,并且我的问题是编码器错误。 DERP。

0 个答案:

没有答案