HanSummer / awesome-web

A list resources of web
1 stars 0 forks source link

自定义服务 #20

Open HanSummer opened 7 years ago

HanSummer commented 7 years ago

概念

 简单讲就是一个javascript函数或对象

作用和分类

 分为内置服务和自定义服务

 作用: 

    1. 在整个应用中提供相同的一份数据

    2. 多个控制器之间数据的通信

    3. 多个控制器相同代码可以写个服务

创建和使用

  创建方式:provide, factory, service, value, constant

  使用方式:通过依赖注入到函数中去进行调用
HanSummer commented 7 years ago

provider

形式:angularModuleInstance.provider(name, Fn or Object);

  1. name:服务名;
  2. Fn or Object :可以是函数或者对象。
    
    Fn => 这个函数是一个构造函数,构造函数必须有$get属性( 这个属性是一个有返回值的方法),如:

moduleInstance.provider("myService", function() { var self = this; this.prop = "aaa"; self.getProp = function() { return self.prop; }; self.setProp = function(newProp) { self.prop = newProp; }; self.$get = function() { return { getProp : self.getProp , setProp : self.setProp } }; });

{ } => 必须有$get属性,与函数中$get一样。如:

moduleInstance.provider("myService", { $get : function() { return { prop: 'aaa' } } });



当服务被注入到控制器或者指令时,AngularJS通过调用$get方法创建服务实例,而且仅实例化一次。
HanSummer commented 7 years ago

factory

形式:angularModuleInstance.factory(name, Fn);

  1. name:服务名;
  2. Fn:函数(返回值)。
    
    Fn => 一个函数,函数有返回值,如:

moduleInstance.factory("myService", function() { var prop = "aaa"; return { getProp : function(){ return prop } , setProp : function(newProp){ prop = newProp; } } });

HanSummer commented 7 years ago

service

形式:angularModuleInstance.service(name, Fn);

  1. name:服务名;
  2. Fn:构造函数。
    
    Fn => 这个函数是一个构造函数,如:

moduleInstance.service("myService", function() { var self = this; this.prop = "aaa"; self.getProp = function() { return self.prop; }; self.setProp = function(newProp) { self.prop = newProp; }; })

HanSummer commented 7 years ago

provider <= factory <= service

  1. factory调用provider实现,service调用factory实现

  2. provider定义的服务可以在模块config阶段进行配置

HanSummer commented 7 years ago

value and constant

形式:angularModuleInstance.value(name, value);

  1. name:服务名;
  2. value:任意值。
    
    value => 常量值,如:

moduleInstance.value("myService", 'aaaa')



比较:用法一样

主要差别是constant可以在config阶段进行配置,value不行。