AngularJS入门教程之服务(Service)


Posted in Javascript onJuly 27, 2016

AngularJS 服务(Service)

AngularJS 中你可以创建自己的服务,或使用内建服务。

什么是服务?

在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用。

AngularJS 内建了30 多个服务。

有个 $location 服务,它可以返回当前页面的 URL 地址。

实例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl">
<p> 当前页面的url:</p>
<h3>{{myUrl}}</h3>
</div>

<p>该实例使用了内建的 $location 服务获取当前页面的 URL。</p>

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $location) {
  $scope.myUrl = $location.absUrl();
});
</script>

</body>
</html>

运行结果:

当前页面的url:

http://www.runoob.com/try/try.php?filename=try_ng_services

该实例使用了内建的 $location 服务获取当前页面的 URL。

注意: $location 服务是作为一个参数传递到 controller 中。如果要使用它,需要在 controller 中定义。

为什么使用服务?

$http 是 AngularJS 应用中最常用的服务。服务向服务器发送请求,应用响应服务器传送过来的数据。

AngularJS 会一直监控应用,处理事件变化, AngularJS 使用 $location 服务比使用 window.location 对象更好。

$http 服务

$http 是 AngularJS 应用中最常用的服务。 服务向服务器发送请求,应用响应服务器传送过来的数据。

实例

使用 $http 服务向服务器请求数据:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl"> 

<p>欢迎信息:</p>

<>{{myWelcome}}<>

</div>

<p> $http 服务向服务器请求信息,返回的值放入变量 "myWelcome" 中。</p>

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
 $http.get("welcome.htm").then(function (response) {
   $scope.myWelcome = response.data;
 });
});
</script>

运行结果:

欢迎信息:

      欢迎访问

$http 服务向服务器请求信息,返回的值放入变量 "myWelcome" 中。

以上是一个非常简单的 $http 服务实例,更多 $http 服务应用请查看 AngularJS Http 教程。

$timeout 服务

AngularJS $timeout 服务对应了 JS window.setTimeout 函数。

实例

两秒后显示信息:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl"> 

<p>两秒后显示信息:</p>

<h1>{{myHeader}}</h1>

</div>

<p>$timeout 访问在规定的毫秒数后执行指定函数。</p>

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $timeout) {
 $scope.myHeader = "Hello World!";
 $timeout(function () {
   $scope.myHeader = "How are you today?";
 }, 2000);
});
</script>

</body>
</html>

运行结果:

两秒后显示信息:

How are you today?

$timeout 访问在规定的毫秒数后执行指定函数。

$interval 服务

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

实例

每两秒显示信息:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl"> 

<p>现在时间是:</p>

<h1>{{theTime}}</h1>

</div>

<p>$interval 访问在指定的周期(以毫秒计)来调用函数或计算表达式。</p>

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $interval) {
 $scope.theTime = new Date().toLocaleTimeString();
 $interval(function () {
   $scope.theTime = new Date().toLocaleTimeString();
 }, 1000);
});
</script>

</body>
</html>

运行效果:

现在时间是:

下午3:41:09

$interval 访问在指定的周期(以毫秒计)来调用函数或计

创建自定义服务

你可以创建自定义的访问,链接到你的模块中:

创建名为hexafy 的访问:

app.service('hexafy', function() {
  this.myFunc = function (x) {
    return x.toString(16);
  }
});

要使用自定义的访问,需要在定义过滤器的时候独立添加:

实例

使用自定义的的服务 hexafy 将一个数字转换为16进制数:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>
<div ng-app="myApp" ng-controller="myCtrl">

<p>255 的16进制是:</p>

<h1>{{hex}}</h1>

</div>

<p>自定义服务,用于转换16进制数:</p>

<script>
var app = angular.module('myApp', []);

app.service('hexafy', function() {
	this.myFunc = function (x) {
    return x.toString(16);
  }
});
app.controller('myCtrl', function($scope, hexafy) {
 $scope.hex = hexafy.myFunc(255);
});
</script>

</body>
</html>

运行结果:

255 的16 进制是:

f f

自定义服务,用于转换16进制数:

过滤器中,使用自定义服务

当你创建了自定义服务,并连接到你的应用上后,你可以在控制器,指令,过滤器或其他服务中使用它。

在过滤器 myFormat 中使用服务 hexafy:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp">
在过滤器中使用服务:

<h1>{{255 | myFormat}}</h1>

</div>

<script>
var app = angular.module('myApp', []);
app.service('hexafy', function() {
	this.myFunc = function (x) {
    return x.toString(16);
  }
});
app.filter('myFormat',['hexafy', function(hexafy) {
  return function(x) {
    return hexafy.myFunc(x);
  };
}]);

</script>

</body>
</html>

运行效果:

在过滤器中使用服务:

         f  f

在对象数组中获取值时你可以使用过滤器:

创建服务 hexafy:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl">
<p>在获取数组 [255, 251, 200] 值时使用过滤器:</p>

<ul>
 <li ng-repeat="x in counts">{{x | myFormat}}</li>
</ul>

<p>过滤器使用服务将10进制转换为16进制。</p>
</div>

<script>
var app = angular.module('myApp', []);
app.service('hexafy', function() {
	this.myFunc = function (x) {
    return x.toString(16);
  }
});
app.filter('myFormat',['hexafy', function(hexafy) {
  return function(x) {
    return hexafy.myFunc(x);
  };
}]);
app.controller('myCtrl', function($scope) {
  $scope.counts = [255, 251, 200];
});
</script>

</body>
</html>

运行效果:

在获取数组[255, 251, 200]值时使用过滤器:

  • ff
  • fb
  • c8

过滤器使用服务将10进制转换为16进制。

以上就是对AngularJS 服务的资料整理,后续继续补充,有需要的朋友参考下。

Javascript 相关文章推荐
不要在cookie中使用特殊字符的原因分析
Jul 13 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
Apr 24 Javascript
js将控件隐藏的方法及display属性介绍
Jul 04 Javascript
node.js中的path.sep方法使用说明
Dec 08 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
Jan 05 Javascript
jQuery实现可编辑的表格实例讲解(2)
Sep 17 Javascript
Vue中之nextTick函数源码分析详解
Oct 17 Javascript
在vue中,v-for的索引index在html中的使用方法
Mar 06 Javascript
在JavaScript中使用严格模式(Strict Mode)
Jun 13 Javascript
JS+CSS实现3D切割轮播图
Mar 21 Javascript
Node.JS如何实现JWT原理
Sep 18 Javascript
JavaScript TAB栏切换效果的示例
Nov 05 Javascript
AngularJS 过滤器的简单实例
Jul 27 #Javascript
AngularJS延迟加载html template
Jul 27 #Javascript
AngularJS入门教程之控制器详解
Jul 27 #Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
Jul 27 #Javascript
AngularJS入门教程之Scope(作用域)
Jul 27 #Javascript
AngularJS入门之动画
Jul 27 #Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
Jul 27 #Javascript
You might like
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
php获取服务器信息的实现代码
2013/02/04 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
php限制ip地址范围的方法
2015/03/31 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
JS window.opener返回父页面的应用
2009/10/24 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
[33:17]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
css3实现可滑动跳转的分页插件示例
2014/05/08 HTML / CSS
什么是Smart Navigation?
2016/07/03 面试题
电信营业员自我评价分享
2014/01/17 职场文书
乡镇综治宣传月活动总结
2014/07/02 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
绿里奇迹观后感
2015/06/15 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
使用Redis做预定库存缓存功能
2022/04/02 Redis
Django框架之路由用法
2022/06/10 Python