AngularJS 服务(Service)

简介:

在 AngularJS 中,服务是一个函数或对象,可在我们的 AngularJS 应用中使用。AngularJS 内建了30 多个服务。这一篇博客将为大家介绍一些服务的使用方式以及如何创建我们自己的服务。
AngularJS服务的API可以点击这里查看

$http

$http 是 AngularJS 应用中最常用的服务。 服务向服务器发送请求,应用响应服务器传送过来的数据。可以理解成jQuery中的ajax。

首先我们创建一个JSON数据文件,用于$http访问。

[1,2,3,4,5,6,7,8,9]

接下来我们使用$http读取数据:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="js/angular.min.js"></script>
        <script type="text/javascript">
            angular.module("myApp", []).controller("myCtrl", function($scope, $http) {
                $http.get("data.json").success(function(data) {
                    $scope.items = data;
                });
            });
        </script>
    </head>

    <body ng-app="myApp" ng-controller="myCtrl">
        <ul>
            <li ng-repeat="x in items">{{x}}</li>
        </ul>
    </body>
</html>

运行效果:

这里写图片描述

$interval

AngularJS $interval 服务对应了 JS window.setInterval 函数。

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="js/angular.min.js"></script>
        <script type="text/javascript">
            angular.module("myApp", []).controller("myCtrl", function($scope, $interval) {
                $scope.now = new Date();
                $interval(function() {
                    $scope.now = new Date();
                }, 1000);
            });
        </script>
    </head>

    <body ng-app="myApp" ng-controller="myCtrl">
        <div>{{now|date:'yyyy:MM:dd HH:mm:ss'}}</div>
    </body>

</html>

这样就实现了一个时钟效果,运行效果:

这里写图片描述

$location

AngularJS中的$location服务是对window.location的封装。

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="js/angular.min.js"></script>
        <script type="text/javascript">
            angular.module("myApp", []).controller("myCtrl", function($scope, $location) {
               $scope.items = [];
               $scope.items.push("absUrl:" + $location.absUrl());
               $scope.items.push("protocol:" + $location.protocol());
               $scope.items.push("host:" + $location.host());
               $scope.items.push("port:" + $location.port());
            });
        </script>
    </head>

    <body ng-app="myApp" ng-controller="myCtrl">
        <ul>
            <li ng-repeat="item in items">{{item}}</li>
        </ul>
    </body>

</html>

以上介绍的为$location的基本用法,另外,$location服务还提供了获得锚点等信息的方法,下面着重介绍一下$location服务获得查询参数的使用,刚接触的时候也走了一些弯路。
$location服务中将查询参数转换为JSON对象的方法为search

首先:假设我们的页面的访问地址为:http://127.0.0.1:8020/location.html,我们在其后添加一些参数,如:http://127.0.0.1:8020/location.html?p1=123&p2=456,我们理想中得到的JSON数据应为:{p1:123,p2:456},我们来试一下是这样子的吗?

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="js/angular.min.js"></script>
        <script type="text/javascript">
            angular.module("myApp", []).controller("myCtrl", function($scope, $location) {
               $scope.params = $location.search();
            });
        </script>
    </head>

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

</html>

我们访问之后会发现页面显示的是:{},并未没有取到数据,这是AngularJS的BUG,并不是这样子,在$location的API中提供了这样的实例

// given url http://example.com/#/some/path?foo=bar&baz=xoxo
var searchObject = $location.search();
// => {foo: ‘bar’, baz: ‘xoxo’}

// set foo to ‘yipee’
location.search(foo,yipee);// location.search() => {foo: ‘yipee’, baz: ‘xoxo’}

我们仿照API的例子将我们的地址改造一下,改造成如下形式:
http://127.0.0.1:8020/mui/location.html#?p1=123&p2=456

这时候我们会发现页面上显示了我们预测的内容。其实在不对请求地址进行改造的情况下,我们也可以获得查询参数的,我们的代码应该这样写:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <!--必须添加base元素,否则报错-->
        <base href="/" />
        <script src="js/angular.min.js"></script>
        <script type="text/javascript">
            angular.module("myApp", []).
            config(function($locationProvider) {
                $locationProvider.html5Mode(true);
            }).controller("myCtrl", function($scope, $location) {
                $scope.params = $location.search();
            });
        </script>
    </head>

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

</html>

自定义服务

上面介绍了一些AngularJS中内置的服务,下面来介绍一下如何自定义自己的服务,看过上一篇《AngularJS 过滤器》的朋友应该可以猜到自定义服务的方式,和自定义过滤器很像。下面我们就通过代码来演示一下如何自定义服务。

<!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>

在这段代码中,我们自定义了一个服务,并向其中添加了一个方法将字符串转换为大写,运行效果:

这里写图片描述

目录
相关文章
|
JSON 移动开发 JavaScript
多款顶级好用的 Vue 表单设计器测评推荐,可拖拽生成表单
Vue 前端开发中,表单组件是排在前三的高频使用的组件,如何快速构建表单,节省力气,避免重复造轮子呢,选择一款适合自己的前端表单设计器就非常重要了。本文介绍 4 款顶级好用的 Vue 表单设计器,其中最后一款卡拉云,是新一代低代码开发工具,不仅能自动生成各类表单,还可以拖拽生成其他常见的前端组件,一行代码连接前后端数据,可快速接入数据库/api。它是表单设计器的超集,可直接生成属于你的后台管理工具,无敌好用。
4178 0
多款顶级好用的 Vue 表单设计器测评推荐,可拖拽生成表单
|
存储 数据可视化 安全
一张图的七十二变——阿里云OSS图片处理实践
      小张是某视频网站的新入职的UED,日常工作就是创作各式各样的海报banner。踌躇满志的小张,上了三天班就蔫了。因为他在完成一张图的创作后,还需要考虑:• 同一张图会以不同的形式应用于网站各处:有时候需裁剪成不同形状,有时需要加水印,有时需转换格式....• 为了风格统一,不同的图需要保持样式统一:不同图片排列组成成一组,每组图片风格(
2700 0
|
8月前
|
人工智能 自动驾驶 数据安全/隐私保护
《人工智能新质生产力:GDP增长的未来引擎,究竟能贡献多少?》
在科技飞速发展的时代,人工智能作为新质生产力的代表,正以前所未有的态势推动全球经济格局变革。据普华永道预测,到2030年AI将带动全球GDP增长14%,相当于15.7万亿美元。在中国,过去三年AI核心产业增速显著,2023年规模达5784亿元,预计2030年超过1万亿元,带动相关产业超10万亿元。AI通过产业升级、消费升级、投资和出口等方面大幅提升生产效率,创造新的经济增长点,尽管存在技术和社会政策的不确定性,但其对GDP的贡献率有望持续提升,为全球经济带来新机遇。
573 5
《人工智能新质生产力:GDP增长的未来引擎,究竟能贡献多少?》
|
7月前
|
开发工具 Android开发 iOS开发
零基础构建即时通讯开源项目OpenIM移动端-Flutter篇
OpenIM 为开发者提供开源即时通讯 SDK,作为 Twilio、Sendbird 等云服务的替代方案。借助 OpenIM,开发者可以构建安全可靠的即时通讯应用,如 WeChat、Zoom、Slack 等。 本仓库基于开源版 OpenIM SDK 开发,提供了一款基于 Flutter 的即时通讯应用。您可以使用此应用程序作为 OpenIM SDK 的参考实现。 开发环境 在开始开发之前,请确保您的系统已安装以下软件: 操作系统:macOS 14.6 或更高版本 Flutter:版本 3.24.5(根据官网步骤进行安装) Git:用于代码版本控制 同时,您需要确保已经部署了最
453 10
|
7月前
|
算法 量子技术 决策智能
探索量子计算:从历史到现状
探索量子计算:从历史到现状
271 6
|
Prometheus Cloud Native Perl
评测Loki日志工具
评测Loki日志工具
256 0
|
安全 物联网 大数据
量子加密:保障信息安全的新前沿
【9月更文挑战第15天】量子加密技术作为保障信息安全的新前沿,正以其独特的优势和潜力引领着信息安全领域的发展。随着技术的不断进步和应用的不断拓展,我们有理由相信量子加密技术将为全球信息安全事业带来革命性的变革。让我们共同期待这一时代的到来!
375 11
|
机器学习/深度学习 数据采集 算法
大数据与机器学习:数字时代的强大动力
在当今数字化时代,数据已经成为了一项宝贵的资源,而大数据和机器学习则是将其转化为实际价值的关键工具。本文将探讨大数据与机器学习的关系,以及它们如何共同推动技术、企业和社会的发展。
947 0
|
存储 测试技术 Apache
高效管理JMeter中的Cookies:测试工程师的全面指南
Apache JMeter的Cookie管理器是性能测试中的关键工具,用于模拟用户会话和保持状态。本文档详细介绍了如何配置和使用Cookie管理器:添加HTTP Cookie Manager到测试计划,配置清除每次迭代Cookies的选项,以及设置登录和验证请求。此外,还讨论了验证、调试、进阶配置,如Cookie政策、跨域Cookies和正则表达式提取Cookie。通过掌握这些步骤,可以提升测试的准确性和效率。
|
视频直播 语音技术

热门文章

最新文章