AngularJS中的provider,factory,service方法

使用$provide中的provider方法定义服务

前面已经知道了module的定义为angular.module(name,[requires],configFn);configFn参数是配置服务的。ng供服务的过程涉及它的依赖注入机制。AngularJS是用$provider对象来实现自动依赖注入机制的。$provide.provider是一种定义服务的方法。注入机制通过调用provider的$get方法,把得到的对象作为参数进行相关的调用。

<!DOCTYPE html>
<html ng-app="app">

<head>
    <meta charset="utf-8">
</head>

<body ng-app="app">
    <div ng-controller="Controller1"></div>
    <script src="http://cdn.bootcss.com/angular.js/1.4.1/angular.js"></script>
    <script type="text/javascript">
    angular.module(‘app‘, [], function($provide) {
        //自定义服务
        $provide.provider(‘helloService‘, function() {
            this.$get = function() {
                return {
                    message: ‘how are you ?‘
                }
            }
        });
    })

    .controller(‘Controller1‘, function($scope, helloService) {
        console.log(helloService);
    });
    </script>
</body>

</html>

定义了名字叫helloService的服务,通过$get方法,让helloService就等于$get返回的对象。在控制器Controller1中,用到了helloService这个服务,就将它写在参数列表里。这里可以看出$scope也是一个服务。在控制台打印出helloService,结果如下:

上面这种方法一般不会用,因为有更加简便的方法,比如$provide里的factory和service方法。

$provide中的factory和service方法

factory方法和service方法可以看作是provider方法的简写,它们省去了写$get方法,具体用法如下:

factory方法

<!DOCTYPE html>
<html ng-app="app">

<head>
    <meta charset="utf-8">
</head>

<body ng-app="app">
    <div ng-controller="Controller1"></div>
    <script src="http://cdn.bootcss.com/angular.js/1.4.1/angular.js"></script>
    <script type="text/javascript">
    angular.module(‘app‘, [], function($provide) {
        $provide.factory(‘myFactory‘, function() {
            return ‘i am factory‘
        });
    })

    .controller(‘Controller1‘, function($scope, myFactory) {
        console.log(myFactory);
    });
    </script>
</body>

</html>

对factory方法来说,返回可以是任意类型,所以这里返回字符串是没有问题的。

service方法

<!DOCTYPE html>
<html ng-app="app">

<head>
    <meta charset="utf-8">
</head>

<body ng-app="app">
    <div ng-controller="Controller1"></div>
    <script src="http://cdn.bootcss.com/angular.js/1.4.1/angular.js"></script>
    <script type="text/javascript">
    angular.module(‘app‘, [], function($provide) {
        $provide.service(‘mySerivce‘, function() {
            return {
                message: ‘i am service‘
            }
        });
    })

    .controller(‘Controller1‘, function($scope, mySerivce) {
        console.log(mySerivce);
    });
    </script>
</body>

</html>

service方法返回的只能是引用类型(数组、对象等),如果是其它类型的话会得不到内容。这一点是factory和service的区别。

此外,factory和service方法在module里还有快捷方法,用法为:

    var module1 = angular.module(‘module name‘, ...);
    module1.factory();
    module1.service();
时间: 2024-07-30 10:14:27

AngularJS中的provider,factory,service方法的相关文章

AngularJS中serivce,factory,provider的区别

一.service引导 刚开始学习Angular的时候,经常被误解和被初学者问到的组件是 service(), factory(), 和 provide()这几个方法之间的差别.This is where we'll start the twenty-five days of Angular calendar. 二.service 在Angular里面,services作为单例对象在需要到的时候被创建,只有在应用生命周期结束的时候(关闭浏览器)才会被清除.而controllers在不需要的时候就

AngularJS中的Provider

我们要从Dependency Injection(依赖注入)的对象中获取的数据或者功能,都是Injector给的. Injector会创建两种对象:服务 或 专用对象 Injector要知道如何创建这些对象,就要用户自行去"注册". 有五种注册方法: Provider, Value, Factory, Service 和 Constant 构建Service 最强大的是Providor,其他方法只不过是Provider在某些条件下的简化版. 构建specialized objects

【备忘录】provider, factory, service, hello world example

var myApp = angular.module('myApp', []); //service style, probably the simplest one myApp.service('helloWorldFromService', function() { this.sayHello = function() { return "Hello, World!" }; }); //factory style, more involved but more sophistica

angularjs中的run()方法使用

run方法用于初始化全局的数据,仅对全局作用域起作用. 举个栗子吧:<script type="text/javascript"> var m1 = angular.module('myApp',[]); m1.run(['$rootScope',function($rootScope){ $rootScope.name = 'hello'; }]); console.log( m1 );</script>

angularjs中的几种工具方法

1.比较两个字符串是否相等 2.对象形式转化成json和json转化成字符串形式 3.便利对象遍历数组 4.绑定数据

angularjs 中传递非URL参数方法

在目标页面规定接受的参数:$stateProvider.state('page2', {params: {'DATA': null}}) 传参:$state.go('page2', {DATA: 'aaa'}); 目标页面接受参数:控制器注入$stateParams之后可以通过$stateParams.DATA来获取‘aaa’

Angularjs 自定义服务 provide 里 provider 方法 以及 factory、 service 方法以及 provider 供应商的概念

Angularjs 自定义服务 provide 里 provider 方法 以及factory. service 方法以及 provider 供应商的概念 学习要点:1. Angularjs 中的 provider 方法2. Angularjs 中的 factory 方法3. Angularjs 中的 service 方法4. provider 供应商的概念5. 研究 ionic 代码中的 services 当你初试 Angular 时,很自然地就会往 controller 和 scope 里堆

AngularJS 中 Provider 的用法及区别

在一个分层良好的 Angular 应用中,Controller 这一层应该很薄.也就是说,应用里大部分的业务逻辑和持久化数据都应该放在 Service 里. 为此,理解 AngularJS 中的几个 Provider 之间的区别很有必要. Provider 创建的新服务都可以用来注入.包括: provider factory service constant value 另外,内建的服务 $controller 和 $filter 也可以被注入,同时也可以使用这些服务来获得新的过滤器和控制器.

Servlet中service方法

在学习Servlet的过程中,我们大多时候编码都是直接继承HttpServlet这个类,并且重写doGet ,doPost,但是查看Api时我们会发现Servlet接口 ,GenericSevlet抽象类 以及HttpServlet类中都有service方法,那么为什么我们继承HttpSevlet类时不要重写service 而要重写doGet doPost呢?service的作用是什么捏?? 正如上文中所说的,Servlet中,service方法是一直存在的,因为最高层的接口Servlet(像H