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;
        };
    }
]);  

原文链接:http://blog.51yip.com/jsjquery/1606.html

时间: 2024-07-30 13:43:43

angularjs factory,service,provider 自定义服务的不同的相关文章

factory service provide自定义服务

1.factory factory , 就是你提供一个方法, 该方法返回一个对象的实例, 对于 AngularJS 的 factory 来说, 就是先定义一个对象, 给这个对象添加属性和方法, 然后返回这个对象, 例如: var app = angular.module('MyApp', []); app.factory('MyFactory', function() { // define result object of factory. var result = {}; // add so

angularjs 中 Factory,Service,Provider 之间的区别

本片文章是使用了 angularjs 中使用 service 在controller 之间 share 对象和数据 的code(http://jsfiddle.net/kn46u0uj/1/) 来进行演示 Factory,Service,Provider 之间的区别 1. Factory factory('dataService',function(){ return { golbal_sitename:"this is the shared value", sayHello:func

AngularJS学习---REST和自定义服务(REST and Custom Services) ngResource step 11

1.切换目录 git checkout step-11 npm start 2.效果图 效果图和step 10的没有什么差别,这里主要的改动都是代码,代码做了很多优化,这里效果图就不再贴出来了. 3.实现代码 step-10和step-11之间的差别:https://github.com/angular/angular-phonecat/compare/step-10...step-11 Dependencies (依赖的JS): { "name": "angular-see

AngularJS中几种Providers(Factory, Service, Provider)的区别

原文: http://blog.xebia.com/2013/09/01/differences-between-providers-in-angularjs/ 什么是Provider? AngularJS docs 是这样定义provider的: provider是一个对象, 它有一个$get()方法. injector 调用$get方法以此来创建一个service的实例. Provider还有一些其他的方法用来配置provider. AngularJS 使用 $provide 注册新的pro

AngularJs学习笔记5——自定义服务

前面整理了AngularJs双向数据绑定和自定义指令的相关内容,从手册上看也知道,ng部分还包括过滤器和函数,以及服务等. 过滤器:filter,就是对数据进行格式化,注意管道格式,例如: {{表达式 | number/currency/data/orderBy : " 相应的格式或表达式 "}} 函数:function,应该不用介绍了.这里需要注意的是forEach函数的形参顺序,基本格式如下: 1 var obj={name:"fanfan",age:"

深究AngularJS——自定义服务详解(factory、service、provider)

前言 3种创建自定义服务的方式. Factory Service Provider 大家应该知道,AngularJS是后台人员在工作之余发明的,他主要应用了后台早就存在的分层思想.所以我们得了解下分层的作用,如果你是前端人员不了解什么是分层,那么你最好问问你后台的小伙伴. dao层:就是Model层,在后台时,这一层的作用,就要是写与数据库交互数据的一层,在angularJS里就主要是写ajax的. service层:主查写逻辑代码的,但在angularJS里也可以持久化数据(充当数据容器),以

自定义服务 factory 和 service

1.使用factory 方法 必须有返回值 即return ,factory只是调用普通的function,可以返回任何东西. HTML 代码 <body ng-app="myApp"> <div ng-controller="myCtrl"> <ul> <li>{{data.name}}</li> <li>{{data.age}}</li> <li>{{data.pho

Angular之Providers (Value, Factory, Service and Constant )

官方文档Providers Each web application you build is composed of objects that collaborate to get stuff done.(每一个web应用都是由一些对象“组装”成的,这些对象共同合作,来完成特定的任务)These objects need to be instantiated and wired together for the app to work.(这些对象需要被实例化,然后“组装”在一起来使web应用能

Providers(Value, Factory, Service and Constant )

-------------------------------官方文档--------------------------------------------------------------------- Providers  AngularJS: Service vs provider vs factory Each web application you build is composed of objects that collaborate to get stuff done.(每一