【AngularJS】——核心特性之服务

      在之前几篇文章中,提到了AngularJS几个核心特性,今天继续来看看ng的服务(service)。


      1、简单介绍

      首先服务是一个单例,即无论这个服务被注入到任何地方,对象始终只有一个实例。
其次这与我们自己定义一个function然后在其他地方调用不同,因为服务被定义在一个模块中,所以其使用范围是可以被我们管理的。ng的避免全局变量污染意识非常强。

      ng提供了30多个内置的服务,可以到API中 https://docs.angularjs.org/guide/di 以及Service API中https://docs.angularjs.org/api/ng/service进行查看学习。我们依靠ng的依赖注入机制把服务注入到controller、指令或者是其他服务中,对服务进行使用。


      2、定义服务

      如同指令一样,系统内置的服务以$开头,我们也可以自己定义一个服务。定义服务的方式有如下几种:


      ※ 使用Module的factory方法

      使用Module的service方法

      使用系统内置的$provide服务


      用代码说明如下:

var yxmTestServices = angular.module('yxmTestServices', []);  
  
yxmTestServices.factory('facetorytest', ['$window',         //factory方式  
    function($window){  
        var test = {  
            firstname:"san",  
            lastname:function(){  
                return "zhang";  
            }  
        };  
        $window.alert('aaaa');         //内置服务可以注入  
        return test;  
    }  
]);  
  
yxmTestServices.service('servicetest', ['$window',          //service方式  
    function($window){  
        $window.alert('bbbb');        //内置服务可以注入  
        this.firstname = "san";  
        this.lastname = function(){  
            return "zhang";  
        }  
    }  
]);  
  
yxmTestServices.provider('providertest',[                  //provider方式,内置服务不可以注入  
    function(){  
        this.test = {  
            "firstname":"san",  
            "lastname":"zhang"  
        }  
        this.$get = function () {  
            return this.test;  
        };  
    }  
]);


      3、服务调用

      congtroller调用定义模块,controller.js

//以注入的方式来调用yxmTestControllers.controller('TestCtrl',['$scope',"facetorytest","servicetest","providertest",  
    function($scope,facetory111,service111,provider111) {     //自定义,服务名称  
        $scope.facetorytest = facetory111.firstname+" "+facetory111.lastname();  
        $scope.servicetest = service111.firstname+" "+service111.lastname();  
        $scope.providertest = provider111.firstname+" "+provider111.lastname;  
    }  
]);

      创建app.js把service和controller结合到一起。app.js

/* App Module */  
  
var yxmTestApp = angular.module('yxmTestApp', [  
    'ngRoute',  
    'yxmTestControllers',     //上面定义的controller  
    'yxmTestServices'         //上面自定义的服务  
]); 

      HTML调用显示

<!doctype html> 
<html lang="en" ng-app="yxmTestApp">
<head>

//各种引用

</head>
<body >  
  
  <div ng-controller="TestCtrl">  
     <p>{{facetorytest}}</p>  
      <p>{{servicetest}}</p>  
      <p>{{providertest}}</p>  
  </div>  
  
</body>  
</html> 

      值得注意的是,Angular services依赖注入的规范:自定义的service要写在内建的Angular services之后,自定义的service之间是没有先后顺序的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值