angular的config和run分别是干什么的???,怎么执行的???

1.背景介绍
ANGULARJS模块加载
AngularJS模块可以在被加载和执行之前对其自身进行配置。我们可以在应用的加载阶段应用不同的逻辑组对其修改,在模块加载阶段,AngularJS会在提供者(provide)注册和配置的过程中对模块进行配置。在整个AngularJS的工作流中,这个阶段是唯一能够在应用启动前对其进行修改的部分。
AngularJS的工作流包括了 配置块(config) 和 运行块(run) 并且在编译期间会执行它们
2.知识剖析
2.1、配置(config)
通过config方法实现对模块的配置,AngularJS中的服务多数都对应一个provider, 用来执行与对应服务相同的功能或对其配置,比如 l o g 、 log、 loghttp、 l o c a t i o n 都 是 内 置 服 务 , 相 对 应 的 “ p r o v i d e r ” 分 别 是 location都是内置服务, 相对应的“provider”分别是 locationproviderlogProvider、 h t t p P r o v i d e r 、 httpProvider、 httpProviderlocationPorvider。
//新建了一个模板:这个模板中有一个服务,一个自定义指令
var app = angular.module(“myApp”, []);
app.fatory(‘myFactory’, function () {
//利用工厂生产 创建一个 服务
var service = {};
return service;
});
app.directive(‘myDirectiive’, function () {
//创建 一个 自定义指令
return {
template: ‘

戳我!

}
});

                        // angularJS编译的流程是这样的:
                        var app = angular.module('myApp', []);
                        app.config(function ($provide, $compileProvider) {
                            $provide.factory('myFactory', function () {
                                var service = {};
                                return service;
                            });
                            $compileProvider.directive('myDiretive', function () {
                                return {
                                    template: '<div><button>click me</button></div>'
                                }
                            });
                        });
                        // PS:angularJS会根据你定义的函数顺序来执行他们

2.2、运行块(run)
和配置块不同,运行块在注入器创建之后被执行,它是所有AngularJS应用中第一个被执行的方法。
运行块是AngularJS中与main方法最接近的概念。运行块中的代码块通常很难进行单元测试,它是和应用本身高度耦合的。
运行块通常用来注册全局的事件监听器。例如,我们会在.run()块中设置路由事件的监听器以及过滤未经授权的请求。
调用方式1: 服务也是以模块形式存在的,对外提供特定功能,将服务做为依赖注入进去的,然后再进行调用, 调用方式2: 直接运行相应的服务模块, AngularJS提供了run方法来实现。
run方法还是最先执行的,利用这个特点我们可以将一些需要优先执行的功能通过run方法来运行。
假设我们需要在每次路由发生变化时,都执行一个函数来验证用户的权限,放置这个功能唯一合理的地方就是run方法:

3.常见问题
如何通过 config 配置一个路由模块?
4.解决方案
下面实例使用的是第三方ui-router

5.扩展思考
provider是个啥?
p r o v i d e 服 务 负 责 告 诉 A n g u l a r 如 何 创 造 一 个 新 的 可 注 入 的 东 西 : 即 服 务 。 服 务 会 被 叫 做 供 应 商 的 东 西 来 定 义 , 你 可 以 使 用 provide服务负责告诉Angular如何创造一个新的可注入的东西:即服务。服务会被叫做供应商的东西来定义,你可以使用 provideAngular西西使provide来创建一个供应商。你需要使用 p r o v i d e 中 的 p r o v i d e r ( ) 方 法 来 定 义 一 个 供 应 商 , 同 时 你 也 可 以 通 过 要 求 provide中的provider()方法来定义一个供应商,同时你也可以通过要求 provideprovider()provide被注入到一个应用的config函数中来获得$provide服务。

6.参考文献
参考一:angular权威指南
参考二:AngularJS ui-router配置

7.更多讨论
Q1: angularjs中config和run的区别?
答:执行顺序不同,注入服务类型不同

Q2:什么样的东西能够被注入到config里面呢?
答:provider(提供者)、constant(常量)

Q3:既然factorry和value能够节省那么多的代码,为什么还有人要使用provider?
答:Providers 是唯一一种你可以传进 .config() 函数的 service。当你想要在 service 对象启用之前,先进行模块范围的配置,那就应该用 provider。

作者:liwenrou
来源:CSDN
原文:https://blog.csdn.net/liwenrou/article/details/80740787

### Angular Apollo 的用途 Angular Apollo 是一个用于在 Angular 应用程序中处理 GraphQL 查询的强大工具。它的主要目的是简化与 GraphQL 服务器的交互过程,提供缓存、状态管理数据获取等功能[^1]。通过使用 Angular Apollo,开发者可以轻松地执行复杂的查询变更请求,并自动管理本地缓存中的数据一致性。 #### Angular Apollo 的核心特性 - **GraphQL 支持**:允许应用程序以声明式的方式描述所需的数据。 - **内置缓存机制**:减少网络调用次数并提高用户体验速度。 - **实时订阅功能**:支持 WebSocket 协议下的实时更新通知。 - **易于集成**:无缝衔接 Angular 生态系统内的其他组件服务。 --- ### Angular Apollo 与传统 HTTP 请求之间的区别 | 特性 | Angular Apollo | Traditional HTTP Request | |--------------------------|-----------------------------------------------|----------------------------------------------| | **协议类型** | 使用 GraphQL | 主要是 RESTful API | | **单一接口 vs 多个端点** | 提供统一入口访问所有资源 | 每种资源通常对应独立 URL | | **灵活性** | 动态指定返回字段 | 结果固定,无法按需裁剪 | | **错误处理** | 错误信息嵌入响应体内部 | 状态码区分成功失败 | | **性能优化潜力** | 自动化批量加载及延迟加载 | 开发者手动控制 | 当发起一次典型的 HTTP GET 请求时,服务端会按照预设规则返回整个对象树;而利用 Angular Apollo 发送相同目的的 GraphQL Query 则可以让客户端精确指明哪些属性感兴趣[^2]。这不仅减少了不必要的传输开销,还增强了系统的适应能力面对频繁变化的需求场景。 另外值得注意的是,在某些特定条件下比如仅存在简单读写操作或者团队已经广泛熟悉REST风格架构下继续沿用后者可能是更为明智的选择[^3]。然而对于那些追求极致效率并且愿意投入时间成本去学习新技术栈的企业来说,迁移到基于 Apollo 的图形QL解决方案往往能带来长期收益。 最后提醒一点就是虽然两者都能完成基本的信息交换任务但是它们背后的设计理念完全不同因此切换之前务必充分评估现有环境是否适合接纳此类变革[^4]。 --- ### 示例代码对比 #### 传统的 HTTP 请求 ```typescript this.http.get('https://api.example.com/users').subscribe(response => { console.log(response); }); ``` #### 使用 Angular Apollo 进行相同的请求 ```typescript const GET_USERS = gql` query getUsers { users { id name } } `; this.apollo.watchQuery<any>({ query: GET_USERS }).valueChanges.subscribe(result => { console.log(result.data.users); }); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值