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 相关文章推荐
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
May 08 Javascript
详解JavaScript 中的 replace 方法
Jan 01 Javascript
高性能JavaScript循环语句和条件语句
Jan 20 Javascript
浅谈JavaScript中的this指针和引用知识
Aug 05 Javascript
AngularJS控制器详解及示例代码
Aug 16 Javascript
jquery购物车结算功能实现方法
Oct 29 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
Feb 12 Javascript
利用jQuery实现一个简单的表格上下翻页效果
Mar 14 Javascript
Vue2路由动画效果的实现代码
Jul 10 Javascript
ReactNative中使用Redux架构总结
Dec 15 Javascript
微信小程序实现MUI数字输入框效果
Jan 31 Javascript
微信小程序进入广告实现代码实例
Sep 19 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
世界收音机发展史
2021/03/01 无线电
上海牌131型七灯四波段四喇叭一级收音机
2021/03/02 无线电
剖析 PHP 中的输出缓冲
2006/12/21 PHP
PHP实现异步调用方法研究与分享
2011/10/27 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
php发送与接收流文件的方法
2015/02/11 PHP
php实现zip文件解压操作
2015/11/03 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
javascript 面向对象 function类
2010/05/13 Javascript
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
JQuery球队选择实例
2015/05/18 Javascript
JavaScript实现自动消除按钮功能的方法
2015/08/05 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
在vue中使用vuex,修改state的值示例
2019/11/08 Javascript
vue实例的选项总结
2020/06/09 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
Django日志模块logging的配置详解
2017/02/14 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
python3转换code128条形码的方法
2019/04/17 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
关于运动会的广播稿50字
2014/10/17 职场文书
党员民主评议总结
2014/10/20 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
销售合作意向书范本
2015/05/08 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
Python&Matlab实现樱花的绘制
2022/04/07 Python
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android