码迷,mamicode.com
首页 > Web开发 > 详细

AngularJS中的provider,factory,service方法

时间:2015-06-27 19:59:16      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

使用$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();

AngularJS中的provider,factory,service方法

标签:

原文地址:http://iampomelo.blog.51cto.com/10193513/1666358

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!