Javascript 角度引导生命周期:满载后运行代码

Javascript 角度引导生命周期:满载后运行代码,javascript,angularjs,Javascript,Angularjs,Angular为应用程序模块定义运行块。这在配置之后和加载任何控制器和指令之前运行 在加载所有控制器、指令、服务等之后,生命周期中是否有一个步骤来运行某些东西 为了在授权pubsub服务中广播消息,我需要它,并且我希望确保在发布消息之前加载所有内容。虽然我基本上可以在run块中检查身份验证,只是通过身份验证服务检查JWT的localstorage,但如果我在run块中发布,我无法确定是否所有内容都已加载。我想知道Angular是否会暴露出类似的情况,或者我是否需要找到不同的解决方案 谢谢 可选答

Angular为应用程序模块定义运行块。这在配置之后和加载任何控制器和指令之前运行

在加载所有控制器、指令、服务等之后,生命周期中是否有一个步骤来运行某些东西

为了在授权pubsub服务中广播消息,我需要它,并且我希望确保在发布消息之前加载所有内容。虽然我基本上可以在run块中检查身份验证,只是通过身份验证服务检查JWT的localstorage,但如果我在run块中发布,我无法确定是否所有内容都已加载。我想知道Angular是否会暴露出类似的情况,或者我是否需要找到不同的解决方案


谢谢

可选答案,摘自

您可以使用自定义的postDigest回调。如果您只需要第一个postDigest回调,请添加一个标志来指示它已发生

function postDigest(callback){    
  var unregister = $rootScope.$watch(function(){  
    unregister();
    $timeout(function(){
      callback();
      postDigest(callback);
    },0,false);       
  });
}

postDigest(function(){
  console.log('do something');
})

我想说,您可能会遇到问题,因为有些控制器可能在用户操作之前无法加载。例如,可以重复ng以创建指令的多个实例。ng repeat将随着时间的推移创建该指令的新实例,可能会生成新的作用域等。在注释中,您表示要发布身份验证信息。我建议使用其他服务或控制器注入的服务来确定身份验证状态。这将可靠地为依赖项提供正确的信息。您可以创建一个返回承诺的身份验证服务。每个人都可以根据承诺的结果做出反应。@jazeee我的身份验证服务返回一个承诺,因为它用于向服务器进行身份验证。但是,我的授权服务负责检查我们是否在任何给定时间通过JWT拥有授权用户,以及该用户的权限是什么。我使用pubsub/broadcast是因为权限和登录状态可以随时更改;因此,承诺在这里不起作用,因为我需要倾听变化。如果发生更改,我将广播该事件,以便应用程序中的所有内容都能相应地响应。我遇到的问题是在加载时执行此操作。顺便说一句,在run块中,$timeout和零计数似乎确实起作用,但这是一个幼稚的实现,并且存在显示闪烁。我不认为这是一个保证的解决方案。也许是一个鸡蛋问题。我可以想到的一种方法是发布一个通知,告诉侦听器检查新的更新,并且每个侦听器在实例化时检查Auth状态。这种组合解决了这两种情况。例如如果service1在身份验证之前启动,则在进行身份验证时将通知它。若控制器在身份验证后启动,它将检查状态,但也将侦听以后的更改。如果Auth更改,它将通知所有侦听器。换句话说,将其分解为侦听事件,但在创建时也进行初始化。也许可以创建AuthState服务