什么是服务
- 服务是公用的方法,可以把控制器中相同的部分抽取出来封装成一个服务,需要的时候注入控制器。
服务的分类
- 服务分为内置服务与自定义服务
常见内置服务
$http服务用来向后台请求数据
12345678910111213141516171819202122232425262728293031323334var mod=angular.module('m',[]);mod.controller('myCtrl',function ($scope,$http) {// 注入http服务// $http用来向后台请求数据$http({url:'http.json',method:'GET',params:{data:'aaaa'} //只是对于GET请求使用,在问号后面传递参数//method:'POST',//data:{}}).success(function (data,status,headers,config) {// 当成功时执行success方法中的回调函数// data 请求回来的数据// status 状态码// headers是一个方法,执行时可看到头部信息// config 配置信息,包含以上三者console.log(data,status,headers,config);}).error(function (err) {// 当失败时执行error中的回调函数// err错误信息})})//$http返回的是一个promise (用来解决异步)// 封装的简便方法// $http.get() $http.delete()// 参数1 路径字符串 参数2 config 对象,放配置内容// $http.post() $http.put()// 参数1 路径字符串 参数2 请求体data 参数3 config// $http.jsonp() (实现跨域请求,其回调函数名 JSON_CALLBACK)// 参数 请求路径// $http.delete()// $http.put()\$interval与$timeout 设定计时器,不同于原生计时器在于其可触发脏值查询,调用其cancel方法清除计时器
|
|
五种自定义服务
provider是最全面的自定义服务,注入的是服务实例上$get方法的返回值,可以暴露方法作为API,模块的config方法接受服务名+Provider参数,该参数是服务的一个实例,可以对暴露的API进行配置
12345678910111213141516171819202122232425262728293031var myModule = angular.module('myModule', []);//配置名为myPro的服务myModule.provider('myPro',function () {var currency='$';this.setCurrency=function (a) {currency=a;};this.$get=function () {return {'+':function (a,b) {return currency+(Number(a)+Number(b));}}}})// 配置函数,对服务暴露出来的接口进行配置,函数中传递的参数是// 服务名+provider// myProvider是my服务的实例myModule.config(function (myProProvider) {myProProvider.setCurrency('¥');})// 注入自定义服务myModule.controller('myCtrl',['$scope','myPro',function ($scope,myPro) {//注入的是服务的实例$get方法的返回值$scope.result=myPro['+'](1,2);}])factory 最常用定义服务的方法.内部封装的也是provider,函数定义部分只要返回值,不能调用config配置函数
1234567891011121314151617181920var myModule = angular.module('myModule', []);// 注入自定义服务 注入的是factory返回值myModule.factory('myPro',function () {return {'+':function (a,b) {return (Number(a)+Number(b));},'-':function (a,b) {return (a-b);}}})myModule.controller('myCtrl',['$scope','myPro',function ($scope,myPro) {$scope.cal=function () {$scope.result=myPro[$scope.val]($scope.one,$scope.two);}}])service 相当于原生js中的构造函数,向控制器注入服务的时候,注入的是该方法的一个实例,不能调用配置函数config
123456789101112131415var myModule = angular.module('myModule', []);myModule.controller('myCtrl',['$scope','myPro',function ($scope,myPro) {$scope.result=myPro['*'](3,5);}])myModule.service('myPro',function () {this['+']=function (a,b) {return (Number(a)+Number(b));};//ES6写法 箭头函数this['*']=(a,b)=>a*b;})value用来定义变量,也可以作为服务注入到控制器中,不能在配置函数中调用
123456789var myModule = angular.module('myModule', []);//相当于把myPro赋值为'123'myModule.value('myPro','123');myModule.controller('myCtrl',['$scope','myPro',function ($scope,myPro) {$scope.result=myPro;}])constant 定义常量,用法同value.与value不同点在于可以注入到配置函数中