我爱编程

Angular(四)

2017-04-25  本文已影响19人  sheepmiee

服务

angular提供了五种自定义服务方式 provider factory" service constant value

内置$http

我们可以使用内置的$http服务直接同外部进行通信。$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象,用法同jquery

$http服务是只能接受一个参数的函数,这个参数是一个对象,包含了用来生成HTTP请求的
配置内容。这个函数返回一个promise对象,具有success和error两个方法。返回一个promise对象

var promise=$http({
method:'GET',
url:"data.json"
});

由于$http方法返回一个promise对象,对象中有一个then方法来处理回调,方法中有两个参数,第一个是成功的回调第二个是失败的回调

$http.jsonp(
      $sce.trustAsResourceUrl(
      'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd='+$scope.query),
      {jsonpCallbackParam: 'cb'})
      .then(
      function (res) { //成功
                $scope.arrs = res.data.s;
            },
      function (err) { //失败
                console.log(err);
            });

provider

可配置,是唯一一种你可以传进 .config() 函数的服务:

app.provider('Calc',function () { 
        this.currency = '$'; //在实例上增加了属性
        this.$get = function () {
            return {
                sum: (a,b) => this.currency +(a+b)
            }
        };
    });

Calc为服务的名字,第二个参数接受一个构造函数,实例对象上要有一个¥get方法,$get方法必须要返回一个对象obj,这个对象就是真正被注入的服务.

app.provider('name',function(){
  ....
  return {
    ...
    $get:function(){
      ...
      return obj
    }
     }
})

factory

app.factory('name',function(){return obj})
factory 不具有配置能力,因为$get方法在我们的config方法后执行 配置后会被覆盖掉

serviceApp.factory('myConfig',function(){
    var myname = 'code_bunny';
    var age = 12;
    var id = 1;
    return {
        name: myname,
        age: age,
        getId: function(){
            return id
        }
    }
});

name为服务的名字,第二个参数传入一个函数,函数需要有一个返回值obj,返回一个对象.实际被注入的服务就是这个对象.

其他自定义服务

最大的是provider factory是基于provider的 service 是基于factory的 value是基于factory的

上一篇 下一篇

猜你喜欢

热点阅读