我想定义一个简单的工厂,它将成为我应用中给定资源的$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
为空。
我想到了两种方法来处理这个问题,我对此并不感兴趣:
Post
工厂以返回一个承诺,假设您已登录,该承诺将立即得到解决。但为什么要创建另一个回调呢?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)。之前有没有人解决过类似的问题?和/或你推荐一些特别的方法吗?提前谢谢。
if
语句错误,它将登出的用户默认为登录页面,这导致了整个混乱。
事实证明, 实际上是如何工作的,并且我的问题是编码器错误。 DERP。