处理非平凡AngularJS应用程序初始化需求的最佳实践?
我有一个应用程序,它有一些特定的(非琐碎的)初始化需求,但目前还不清楚这方面的最佳实践解决方案是什么。对不起,这是文字墙。问题本身并没有那么复杂,但我需要确保我的推理是清楚的 首先,应用程序本身:处理非平凡AngularJS应用程序初始化需求的最佳实践?,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我有一个应用程序,它有一些特定的(非琐碎的)初始化需求,但目前还不清楚这方面的最佳实践解决方案是什么。对不起,这是文字墙。问题本身并没有那么复杂,但我需要确保我的推理是清楚的 首先,应用程序本身: 它具有用户身份验证,但仅在两个时间点强制执行: 第一次加载应用程序时(第一次)。我将把这个要求称为(1)通过问题的其余部分 在与服务器端交互时,基于需要。我已经用类似的方法解决了这一部分,不过是一个自定义解决方案(这是必需的,因为应用程序需要使用一些我不想依赖的服务)。我将把这个要求称为(2)通过问
- 它具有用户身份验证,但仅在两个时间点强制执行:
- 第一次加载应用程序时(第一次)。我将把这个要求称为(1)通过问题的其余部分
- 在与服务器端交互时,基于需要。我已经用类似的方法解决了这一部分,不过是一个自定义解决方案(这是必需的,因为应用程序需要使用一些我不想依赖的服务)。我将把这个要求称为(2)通过问题的其余部分
- 有两个控制器与此问题相关:
- 导航栏控制器(固定,未绑定到视图)
- 应用于所用视图的控制器(ng视图)
- 它是使用angular.bootstrap手动启动的
运行
块中
详细回答:
应用程序范围的代码(如身份验证)应该在服务中定义。该服务应该公开应用程序的其余部分可以与之交互的API,以便完成该任务。当然,服务的工作是隐藏实现细节。服务本身应该注意从何处获取身份验证信息(最初)-可能从cookie,可能从本地存储或会话存储。。或者它甚至可以进行http调用。但所有这些都被封装到了认证服务中
因为现在您已经编写了一个单独的服务,并且可以将东西注入到您的run块中,所以您可以继续了。您实际上并不需要$rootScope
。$rootScope
是另一个注入式服务。但是因为它参与了脏检查机制,而且似乎这个服务不需要。。您不需要为$rootScope增加额外任务的负担。这不是它的工作,也许它可以委托给其他一些服务,这些服务的唯一任务是身份验证。因为
app.provider('service', function() {
// add method to configure your service
this.configureService = function() { ... };
this.$get = function (/*injectibles*/) {
// return the service instance
return {...};
};
});
app.config(function(serviceProvider) {
serviceProvider.configureService();
serviceProvider.setTimeout(1000);
serviceProvider.setVersion('1.0);
serviceProvider.setExternalWebService('api/test');
... more configuration ...
};