AngularJs几种服务区别
下面说说这几种函数之间的区别:
函数 | 定义 | 适合场景 |
---|---|---|
provider(name, Object OR constructor() ) | 一个可配置的、有复杂逻辑的服务。如果你传递了一个对象,那么它应该有一个叫$get 的函数返回这个这个服务的实例。否则的话,Angular 假设你已经产生了一个构造函数,当被调用时,创建这个实例 此函数是创建服务最具有变现力,相应地也是最复杂的,对于大多数情况,都没必要使用此函数,不过其对于测试和调试是极其有用的。 |
1.当我们希望在应用开始前对service进行配置的时候就需要使用到provide()。比如,我们需要配置service在不同的部署环境里面(开发,演示,生产)使用不同的后端处理的时候就可以使用到了。 2. 当我们打算发布开源provide()也是首选创建service的方法,这样就可以使用配置的方式来配置service而不是将配置数据硬编码写到代码里面。 |
factory(name, $getFunction() ) |
一个不可配置的、简单逻辑的服务。你指定一个函数,当被调用时,返回服务实例。你 可 认 为 是provider(name,{$get:$getFunction()}) |
在service里面当我们仅仅需要的是一个方法和数据的集合且不需要处理复杂的逻辑的时候,factory()是一个非常不错的选择。**注意:**需要使用.config()来配置service的时候不能使用factory()方法 |
service(name, constructor() ) | 一个不可配置的、复杂逻辑的服务。有点类似于带构造函数的 provider,Angular 调用它来创建服务实例。 | service()方法很适合使用在功能控制比较多的service里面 |
在Angular里面,services作为单例对象在需要到的时候被创建,只有在应用生命周期结束的时候(关闭浏览器)才会被清除。而controllers在不需要的时候就会被销毁了。
这就是为什么使用controllers在应用里面传递数据不可靠的原因,特别是使用routing的时候。services在应用的controllers、 方法、数据之前起到了很关键的作用
现在我们开始看怎么创建service。每个方法我们都会看到下面两个一样的参数:
- name-我们要定义的service的名字
- function-service方法
他们都创建了相同的底层对象类型。实例化后,他们都创建了一个service,这些对象没有什么功能上的差别。
至于在工程实践中选择何种形式的服务,可以遵循下列决策流程:
1. 需要全局的可配置参数 ==>Provider
2. 是纯数据,没有行为 ==>Value
3. 只new一次,不用参数 ==>Service
4. 拿到类,自己new出实例 ==>Factory
5. 拿到函数,自己调用 ==>Factory
复制代码
以上只是基本决策,更加敏捷的方式:
是纯数据,先用Value,当发现需要添加行为时,改写为Service;或当发现需要通过计算给出结果时,改写为Factory;当发现需要进行全局配置时,改写为Provider
复制代码
官方开发指南的对比表:
类型 | Factory | Service | Value | Constant | Provider |
---|---|---|---|---|---|
可以依赖其他服务 | 是 | 是 | 否 | 否 | 是 |
使用类型友好的注入 | 否 | 是 | 是 | 是 | 是 |
在config阶段可用 | 否 | 否 | 否 | 是 | 是 |
可以用于创建函数/原生对象 | 是 | 否 | 是 | 是 | 是 |
关于Angular服务,更多详细可见另外一篇文章。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 用一种新的分类方法梳理设计模式的脉络