Angular定义服务-Learn By Doing

简介:

1.服务(Service)介绍

Angular services are substitutable objects that are wired together using dependency injection (DI). You can use services to organize and share code across your app.

Angular服务的两大特点:

  • Lazily instantiated – Angular only instantiates a service when an application component depends on it.
  • Singletons – Each component dependent on a service gets a reference to the single instance generated by the service factory.

懒实例化-一个服务只有当程序的组件用到它的时候才进行实例化;
单例模式-每个依赖服务的组件,都是获得服务工厂生成单个实例的引用。服务是一个单例对象或函数,对外提供特定的功能。

官方提供的示例demo: Using a Service

2.内置(built-in)服务

Angular本身提供了非常多的内置服务,方便用户进行开发。和后端打交道用到的$http,URL跳转用到的$location;动画相关的$animate服务等等。

Angular内置服务

3.自定义(custom)服务的五种方式

59618-20160917124432008-1960324512.png

3.1 value()

定义一个服务,服务可以是字符串,数字或者函数,对象等。它和constant不相同的地方是,它可以在其他
的地方修改,但是不能注入到config中,但是它可以被装饰器decorator修饰。

var app = angular.module('app', []);
app.value('appVersion',"v.1.0.1");

3.2 constant()

定义常量时候使用,定义的值不能进行修改。可以注入到任何需要它的组件中,但是不能被装饰器decorator修饰。
前后端分类的项目中,定义后端服务器URL地址。代码如下:

var app = angular.module('app', []);
app.constant('AppConfig', {
    serverBaseUrl: 'http://192.168.1.1/api/',
});

3.3 factory()

注入的一个function,是在开发过程,自定义服务方法使用做多的一种方式。它和service的区别是,factory注入的是普通的function,而service注入的是一个构造函数constructor。因为它可以返回任何东西,所以在实际开发中使用的最多。它实际上是一个只有$get方法的provider

var app = angular.module('app', []);
app.factory('myService',function(){
  var appVersion="v.1.0.1";
  return appVersion;
});

3.4 service()

注入的是一个构造器,可以在控制器之间共享数据。

var app = angular.module('app' ,[]);
 
app.config(function ($provide) {
  $provide.service('customData', function () {
    this.data = 'Angular Service Here';
  });
});

3.5 provider()

provider可以说是一个可以配置的factory。Angular规定provider必须返回一个$get方法。provider是value,servicefactory的封装。value,servicefactory三种方式定义的服务,底层还是调用provider方法。

var app = angular.module('app', []);
app.config(function($provide) {
  $provide.provider('registration', function() {
    var type;
    return {
      setType: function(value) {
        type = value;
      },
      $get: function() {
        return {
          title: 'Service from Provider ' + type
        }
      }
    }
  })
});
//对registrationProvider进行配置
app.config(function(registrationProvider) {
  registrationProvider.setType('Angular');
});

说明:在配置这里,我们注入的registrationProvider而不是在provider方法里面定义的registration服务名称,这里其实是Angular本身通过做的一件事情。config里面要注入供应商,所以写成驼峰命名格式registrationProvider,Angular会帮我们注入这个provider。

3.6 Decorator

在说明valueconstant方法时,提到了装饰器decorator。它本身不是Provider,而是来装饰其他的provider的。而上面说过provider是value,servicefactory的封装。但是constant不是,所有decorator不能装饰constant。装饰这个概念,个人理解类似C#里面的委托,可以改变已经定义服务里面的方法实现。

value装饰

var app = angular.module('app', []);
app.value('appVersion',"v.1.0.1");

app.config(function($provide){
    $provide.decorator('appVersion',function($delegate){
      return $delegate+"- @cmsoft"
    });
});

参考

Angular Service
AngularJS中的Provider们:Service和Factory等的区别
走进AngularJs(六) 服务
http://www.html-js.com/article/1825

本文转自快乐八哥博客园博客,原文链接http://www.cnblogs.com/liminjun88/p/5878343.html如需转载请自行联系原作者


快乐八哥

相关文章
|
11天前
解决全网90%以上的日期格式转换、日期序列等骚操作问题
解决全网90%以上的日期格式转换、日期序列等骚操作问题
解决全网90%以上的日期格式转换、日期序列等骚操作问题
|
11天前
快速创建Angular组件并定义传参、绑定自定义事件的方法
快速创建Angular组件并定义传参、绑定自定义事件的方法
|
8月前
|
JavaScript 调度
Angular Ngrx Store 工具库里 Action 定义指南
Angular Ngrx Store 工具库里 Action 定义指南
38 0
|
10月前
|
JavaScript API 开发者
为依赖Angular.js的上古项目给VSCode编写$scope定义跳转扩展插件
虽然Angular.js停止更新已经一年了,但依赖它的上古时代的项目并不少。由于都是使用js开发,很难为其提供很好的维护,所以直到今天开发维护也并不愉快。可以说没有开发插件的支持,再成熟老练的框架都发挥困难。
123 0
为依赖Angular.js的上古项目给VSCode编写$scope定义跳转扩展插件
angular定义数组的三种方式
angular定义数组的三种方式
462 0
angular14-控制器的定义
angular14-控制器的定义
86 0
angular14-控制器的定义
|
API
Angular 2.x折腾记 :(3)初步了解服务及使用
不探究高深理论,只探究实际使用,有更好的写法或者经验请指出; 有些暂时没涉及到的知识我可能会顺着例子解释;
130 0
|
JavaScript 前端开发 API
Angular 自定义服务 notification
比如,我们这篇文章要讲到的 notification 的实现。
Angular 自定义服务 notification
Angular tsconfig.json 文件里的 paths 用法和 scoped module 定义
Angular tsconfig.json 文件里的 paths 用法和 scoped module 定义
143 0
Angular tsconfig.json 文件里的 paths 用法和 scoped module 定义
|
JavaScript
Angular 如何根据一个 class 的定义和数据,动态创建一个该类的实例
Angular 如何根据一个 class 的定义和数据,动态创建一个该类的实例
190 0
Angular 如何根据一个 class 的定义和数据,动态创建一个该类的实例