创建服务

Angular提供了几种有用的服务,对于所有的应用来说,你将会发现这些服务对于创建你自己的服务是有用处的。为了创建自己的服务,你应该从通过一个模块(module)注册一个服务工厂方法开始(可以使用Module#factory api或者直接使用模块配置方法中的$provide api)。

所有的Angular服务通过使用在一个命名(id)下的Angular DI(依赖注入)系统来注册它们自己以参与到依赖注入中,就像声明的依赖需要提供给注册服务的工厂方法一样。

注册服务

为了注册一个服务,你必须有一个模块(你要注册的服务将会是这个模块的一部分)。换句话说,你可以注册带有通过Module Api或在模块配置方法中使用$provide服务的模块的服务。例如:

注意:你不是在注册一个服务实例,而是工厂方法将会在创建服务实例的时候被调用。

依赖

服务不仅仅可以被依赖,还可以有它们自己的依赖。这些依赖能够被作为工厂方法的参数指定。(阅读更多

接下来是一个非常简单的例子。这个服务依赖$window服务并且仅仅是一个方法。这个服务简单的存储所有的通知;在第三个后,服务展示window警告的所有通知。

参考:

实例化Angular服务

在Angular中所有的服务使用消极的实例化方式。这意味着一个服务仅当它被需要实例化一个服务或被一个应用组件依赖的时候被创建。另一方面,除非服务被应用直接或间接注册,Angular将不会实例化服务。

单例模式的服务

最后,意识到所有的Angular服务是应用程序内唯一是重要的。这意味着,在每一个注射器中仅仅有一个被给予的服务的实例。由于Angular是“极度讨厌”全局状态的,创建多个注射器是可能的,每一个注射器有它自己的服务实例,但是这是非常稀少的。

『AngularJS』创建 Service的更多相关文章

  1. 『AngularJS』理解$Scope

    理解$Scope 执行概要 在AngularJS,一个子scope通常原型继承于它的父scope.应用于这个规则的表达式是一个使用scope:{...}的指令,这将创建一个『孤岛』scope(非原型继 ...

  2. 『AngularJS』$location 服务

    项目中关于 $location的用法 简介 $location服务解析在浏览器地址栏中的URL(基于window.location)并且让URL在你的应用中可用.改变在地址栏中的URL会作用到$loc ...

  3. 『AngularJS』Service

    理解Angular 服务 什么是Angular Service Angular 服务是为web应用执行特定任务的单例对象或方法. 注:如果组件是为了内容呈现的功能复用,那么服务就是为组件进行功能复用. ...

  4. 『AngularJS』一点小小的理解

    AngularJS 是一个前端的以Javascript为主的MVC框架.与AngularJS相类似的还有EmberJS. 随着时代在进步,各种各样的开发理念与开发框架不断的提出与发展,而就目前来说,除 ...

  5. 『AngularJS』ngShow

    原文 描述 ngShow指令显示或隐藏给定的基于标明ngShow属性的HTML元素.元素的显示或隐藏通过在元素上移除或添加ng-hide CSS类属性.".ng-hide"CSS类 ...

  6. 『AngularJS』ngValue

    原文 描述 绑定给定的表达式到input[select]或input[radio]的值,以便当这个元素被选中的时候,设置这个元素的ngModel到绑定的值.当需要使用ng-repeat来动态生成rad ...

  7. AngularJS』一点小小的理解

    『AngularJS』一点小小的理解   AngularJS 是一个前端的以Javascript为主的MVC框架.与AngularJS相类似的还有EmberJS. 随着时代在进步,各种各样的开发理念与 ...

  8. 『实践』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop完全分布式集群及基于HDFS的网盘实现

    『实践』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop完全分布式集群及基于HDFS的网盘实现 1.基本设定和软件版本 主机名 ip 对应角色 mas ...

  9. JS 中通过对象关联实现『继承』

    JS 中继承其实是种委托,而不是传统面向对象中的复制父类到子类,只是通过原型链将要做的事委托给父类. 下面介绍通过对象关联来实现『继承』的方法: Foo = { // 需要提供一个 init 方法来初 ...

随机推荐

  1. Android——Activity生命周期

    启动: 触发 onCreate()   onStart()   onResume() Home键: 触发 onPause()    onStop() back键退出: 触发 onPause()   o ...

  2. Vue教程:简介(一)

    前言 用了这么久的vue了,但是一直没有时间写个系列文章,现在抽一定时间总结下vue的知识点. 首先,Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript ...

  3. mysql substring_index()查询某个字符中以某个分割符分割后的值

    substring_index(某个字段,以其分割,第几个分割点之前的值); +---------------------------------------------------------+ | ...

  4. CSS 实战1

    1.CSS 初始化 @charset "UTF-8"; /*css 初始化 */ html, body, ul, li, ol, dl, dd, dt, p, h1, h2, h3 ...

  5. SpringBoot非官方教程 | 第四篇:SpringBoot 整合JPA

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot4-jpaJ/ 本文出自方志朋的博客 JPA全称J ...

  6. Interview Question Overload、Refactoring和Override?

    Overload Overload我们百度翻译知道是超载的意思,不过我们一般称其为重载,在这里我们不纠结于它的翻译,我们来讲讲重载是什么意思,重载的好处.在下面我们以Overload来代表重载(为了记 ...

  7. JDBCUtils工具类(转)

    JdbcUtils.java import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource ...

  8. MySQL里面的锁

    MySQL里面的锁可以分为:全局锁,表级锁,行级锁. 一.全局锁:对整个数据库实例加锁.MySQL提供加全局读锁的方法:Flush tables with read lock(FTWRL)这个命令可以 ...

  9. c# 说说开发通用通信库,尤其是分布式服务的通信

    来,牛皮需要吹起,IT行业需要自娱自乐.开篇吹牛..... 现在我们通信真是各种各样,各种组件,但是就我的看法,功能越完善,封装越完善,牺牲的性能可能就越大,代码量就越大. 当然这不能阻挡IT大军的脚 ...

  10. python 之函数

    一 函数的定义:对功能和动作的封装和定义.二 函数的格式:def 函数名(形参列表): 函数名就是变量名:规则就是变量的规则 函数体(return) ret = 函数名(实参列表)三 函数的返回值:函 ...