Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何延迟工厂的实例化_Angularjs_Ionic Framework_Ionic - Fatal编程技术网

Angularjs 如何延迟工厂的实例化

Angularjs 如何延迟工厂的实例化,angularjs,ionic-framework,ionic,Angularjs,Ionic Framework,Ionic,我想定义一个简单的工厂,它将成为我的应用程序中给定资源的$resource定义的入口点(比如Post)。问题是Post的URL取决于用户的组织,因此在用户登录之前实例化Post类(例如类似的URL)是没有意义的(甚至是不可能的)https://host.com/organizations/your-org/posts/:id) 依赖于Post的控制器都受登录保护,因此(理论上)可以定义Post,假设用户已经登录 然而,我发现在任何控制器签名中简单地要求Post,会在引导时初始化Post工厂 an

我想定义一个简单的工厂,它将成为我的应用程序中给定资源的
$resource
定义的入口点(比如
Post
)。问题是
Post
的URL取决于用户的组织,因此在用户登录之前实例化
Post
类(例如类似
的URL)是没有意义的(甚至是不可能的)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
    factory以返回承诺,该承诺将在您登录后立即解决。但是为什么要创建另一个回调呢
  • 将初始的
    Post
    工厂设为存根,然后修改
    Auth.login()
    方法,使其使用正确的定义覆盖
    Post
    工厂。这似乎有点老套,不标准,而我已经做到了
  • 以前有人解决过类似的问题吗?和/或您是否推荐一些特定的方法?提前谢谢

    编辑: 很明显,我的路由器中有一个
    if
    语句不正确,它将注销的用户默认为登录页面,这导致了整个混乱。
    事实证明,这些东西确实是按预期的方式工作的,而我的问题是编码错误。Derp.

    我想在路由器中使用
    resolve
    是一个不错的选择。我觉得有点恶心,因为我不想把我工厂的名字改成
    PostFactory
    PostModelAndPromise
    之类的名字,但这绝对是一个比我目前想到的其他东西更好的选择。在那篇文章中还有其他答案可能适用。一般来说,这个问题是关于尽快运行一些东西,就像在应用程序启动之前一样。我的问题是将工厂的实例化延迟到登录之后。类似但不幸的是,该问题中的答案似乎不适用于我您可以使用$injector:$injector.get(“$log”)手动初始化它;