angularjs factory,service,provider 自定义服务的不同

angularjs框架学了有一段时间了,感觉很好用。可以把angularjs的app理解成php的class,controller是控制器,而内置服务和自定义服务就可以理解成models了。angularjs的内置服务多,例如:$scope,$rootScope,$http,$q,$resource,$routeProvider等等,下面来说一下怎么自定义服务


一,factory,service,provider自定义服务,services.js

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

二,controller调用自定义模块,controllers.js

'use strict';  
  
/* Controllers */  
  
var phonecatControllers = angular.module('phonecatControllers', []);  
  
//写过js function的对这种调用方式,很熟悉,服务名称不能变  
function TestCtrl($scope,facetorytest,servicetest,providertest) {  
    $scope.facetorytest = facetorytest.firstname+" "+facetorytest.lastname();  
    $scope.servicetest = servicetest.firstname+" "+servicetest.lastname();  
    $scope.providertest = providertest.firstname+" "+providertest.lastname;  
}  
  
//这种调用方式根jquery非常的像,服务名称也不能变  
phonecatControllers.controller('TestCtrl',function($scope,facetorytest,servicetest,providertest) {  
    $scope.facetorytest = facetorytest.firstname+" "+facetorytest.lastname();  
    $scope.servicetest = servicetest.firstname+" "+servicetest.lastname();  
    $scope.providertest = providertest.firstname+" "+providertest.lastname;  
});  
  
//以注入的方式来调用,服务名称可以改变  
phonecatControllers.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把上面的service和controller接合到一起。app.js

'use strict';  
  
/* App Module */  
  
var phonecatApp = angular.module('phonecatApp', [  
    'ngRoute',  
    'phonecatControllers',     //上面定义的controller  
    'phonecatServices'         //上面自定义的服务  
]); 

四,html中显示

<!doctype html>  
<html lang="en" ng-app="phonecatApp">  
<head>  
  <meta charset="utf-8">  
  <title>Google Phone Gallery</title>  
  <link rel="stylesheet" href="css/app.css">  
  <link rel="stylesheet" href="css/bootstrap.css">  
  <script src="lib/angular/angular.js"></script>  
  <script src="lib/angular/angular-route.js"></script>  
  <script src="js/app.js"></script>  
  <script src="js/controllers.js"></script>  
  <script src="js/services.js"></script>  
</head>  
<body >  
  
  <div ng-controller="TestCtrl">  
      <p>{{facetorytest}}</p>  
      <p>{{servicetest}}</p>  
      <p>{{providertest}}</p>  
  </div>  
  
</body>  
</html>  
  
显示结果:  
  
tank zhang  
tank zhang  
tank zhang

五,错误纠正


在网上看到,有人说service是不能注入内置服务器的,但是实际操作结果是provider是不能注入内置服务的。

我用的angularjs的版本是AngularJS v1.2.14

phonecatServices.provider('providertest',['$window',  
    function($window){  
        $window.alert('cccc');             //报错  
        this.test = {  
            "firstname":"tank",  
            "lastname":"zhang"  
        }  
        this.$get = function () {  
            return this.test;  
        };  
    }  
]);



provider 注入内置服务错误


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值