AngularJS服务总结

简介:

在之前介绍AngularJS的博客中,简单的介绍了AngularJS提供的常用服务,以及如何自定义服务,具体可参见《AngularJS 服务(Service)》。在这一篇博客中,我将为大家详细介绍如何自定义服务,以及各种方式之间的区别。

value(name, object)

value(name, object)方法允许我们直接将一个普通值或对象作为服务。我们通过一段代码来看看如何使用:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8" />
        <title>AngularJS</title>
        <script type="text/javascript" src="js/angular.min.js"></script>
        <script type="text/javascript">
            angular.module("myApp", [])
                .value("HQValue", 10)
                .controller("myCtrl", function($scope, HQValue) {
                    $scope.value = HQValue;
                });
        </script>
    </head>

    <body ng-app="myApp" ng-controller="myCtrl">
        {{value}}
    </body>

</html>
AI 代码解读

在这段代码中,我们是用value方法定义了一个服务,服务名称为HQValue,值为:10,这是一个很简单的例子。

constant(name, value)

constant(name, value)也可以注册一个服务,值可以是一个字符串、数字、数组、对象或函数,和value(name, object)很像有木有。对上面的示例进行简单的修改:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8" />
        <title>AngularJS</title>
        <script type="text/javascript" src="js/angular.min.js"></script>
        <script type="text/javascript">
            angular.module("myApp", [])
                .constant("HQConstant", 10)
                .config(function(HQConstant) {
                    console.info(HQConstant);
                })
                .controller("myCtrl", function($scope, HQConstant) {
                    $scope.value = HQConstant;
                });
        </script>
    </head>

    <body ng-app="myApp" ng-controller="myCtrl">
        {{value}}
    </body>

</html>
AI 代码解读

细心的小伙伴应该可以发现constant(name, value)value(name, object)的用法虽然很想,但是二者也是有区别的,不然也就没必要搞两个出来了,二者最大的区别在于使用constant(name, value)注册的服务可以在config(configFn)方法中注入,而value(name, object)不可以。通常用value(name, object)来注册服务对象或者函数,而用constant(name, value)来配置数据。

service(name, constructor)

使用service(name, constructor)注册服务,服务对象是使用new进行实例化的,所以我们应该给this添加属性。

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="js/angular.min.js"></script>
        <script type="text/javascript">
            angular.module("myApp", [])
                .service('HQString', function() {
                    this.toUpperCase = function(x) {
                        return x.toUpperCase();
                    }
                }).controller("myCtrl", function($scope, HQString) {
                    $scope.name = HQString.toUpperCase('jianggujin');
                });
        </script>
    </head>

    <body ng-app="myApp" ng-controller="myCtrl">
        <div>{{name}}</div>
    </body>

</html>
AI 代码解读

在这段代码中,我们使用了service(name, constructor)注册了一个服务,服务名为HQString,我们为该服务添加了一个toUpperCase用于将字符串转换为大写。

factory(name, providerFunction)

使用factory(name, providerFunction)注册服务其实就是创建一个对象作为providerFunction的返回值,注入到controller中的其实就是创建的对象。我们使用factory(name, providerFunction)来实现service(name, constructor)同样的功能,代码如下:

<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="js/angular.min.js"></script>
    <script type="text/javascript">
        angular.module("myApp", [])
            .factory('HQString', function() {
                return {
                    toUpperCase: function(x) {
                        return x.toUpperCase();
                    }
                };
            }).controller("myCtrl", function($scope, HQString) {
                $scope.name = HQString.toUpperCase('jianggujin');
            });
    </script>
</head>

<body ng-app="myApp" ng-controller="myCtrl">
    <div>{{name}}</div>
</body>
AI 代码解读

provider(name, provider)

provider(name, provider)是可以传入config(configFn)的服务,如果我们想要在 service对象启用之前,先进行模块范围的配置,那就应该用 provider。使用provider(name, provider)注册服务,我们需要为this添加$get函数,函数返回用于注入到controller中对象,我们也可以为this添加其他属性以便于我们在config(configFn)方法中使用。需要注意的是,如果我们的服务名称为:HQString,那么我们在config(configFn)方法中注入的名称应该为:HQStringProvider。下面我们通过代码来看一下如何使用:

<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="js/angular.min.js"></script>
    <script type="text/javascript">
        angular.module("myApp", [])
            .provider('HQString', function() {
                this.defaults = "defaults";
                this.$get = function() {
                    return {
                        toUpperCase: function(x) {
                            return x.toUpperCase();
                        }
                    };
                }
            }).config(function(HQStringProvider) {
                console.info(HQStringProvider.defaults)
            }).controller("myCtrl", function($scope, HQString) {
                $scope.name = HQString.toUpperCase('jianggujin');
            });
    </script>
</head>

<body ng-app="myApp" ng-controller="myCtrl">
    <div>{{name}}</div>
</body>
AI 代码解读
目录
打赏
0
0
0
0
33
分享
相关文章
SpringCloud微服务实战——搭建企业级开发框架(四十):使用Spring Security OAuth2实现单点登录(SSO)系统
目前每家企业或者平台都存在不止一套系统,由于历史原因每套系统采购于不同厂商,所以系统间都是相互独立的,都有自己的用户鉴权认证体系,当用户进行登录系统时,不得不记住每套系统的用户名密码,同时,管理员也需要为同一个用户设置多套系统登录账号,这对系统的使用者来说显然是不方便的。我们期望的是如果存在多个系统,只需要登录一次就可以访问多个系统,只需要在其中一个系统执行注销登录操作,则所有的系统都注销登录,无需重复操作,这就是单点登录(Single Sign On 简称SSO)系统实现的功能。
1092 54
SpringCloud微服务实战——搭建企业级开发框架(四十):使用Spring Security OAuth2实现单点登录(SSO)系统
新一代通用的Linux软件包管理工具
  1. 前言   snap和flatpak都是新一代跨Linux发行版的软件包管理技术,这两种下一代打包方法在本质上拥有相同的目标和特点:即不依赖于第三方系统功能库的独立包装。上一篇我们简单介绍了flatpak的原理,今天我们接着简要介绍snap的安全机制。   2. 简介   snap是Canoncial公司提出的新一代linux包管理工具,致力于将所有linux发行版上的包格式统一,做到“一次打包,到处使用”。目前snap已经可以在包括Ubuntu、Fedora、Mint等多个Linux发行版上使用。首先我们来了解下snap相关的各种名词:
689 0
Python-Matplotlib绘制条形图
条形图具有丰富的表现形式,常见的类型包括单组条形图,多组条形图,堆积条形图和对称条形图等。本文利用Matplotlib绘制常见条形图。
1390 1
Python-Matplotlib绘制条形图
3条原则,16个小点,帮你写出一个优秀的对外接口!
3条原则,16个小点,帮你写出一个优秀的对外接口!
3条原则,16个小点,帮你写出一个优秀的对外接口!
【排序算法】冒泡排序、简单选择排序、直接插入排序比较和分析
本文简单介绍了冒泡排序、简单选择排序、直接插入排序,并对这三种排序进行比较,入参都是80000个随机数,比较算法耗时。进一步,我们通过代码分析三种排序算法的性能。
【排序算法】冒泡排序、简单选择排序、直接插入排序比较和分析
【Spring Cloud】新闻头条微服务项目:自媒体前后端搭建&素材管理(含优化)
主要介绍自媒体端的前后端搭建及素材管理中的上传图片素材、获取素材列表并展示、收藏素材、删除素材,最后对删除素材做了优化,优化了其逻辑的合理性。
523 0
【Spring Cloud】新闻头条微服务项目:自媒体前后端搭建&素材管理(含优化)
『Kubernetes』Linux安装K8S集群过程笔记
📣读完这篇文章里你能收获到 - K8S安装全过程 - 博主自己实操笔记带你跳过所有坑
884 0
『Kubernetes』Linux安装K8S集群过程笔记
服务器迁移最佳实践
越来越多的企业上云后,在窗口期内快速、平滑迁移到阿里云上,用最优的方案来实践以及实现业务价值。
964 0
服务器迁移最佳实践
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问