第8章 服务

服务是一个对象或函数,对外提供特定的功能。

8.1 内建服务

1. $location是对原生Javascript中location对象属性和方法的封装。

  // $location内置服务
// AngularJS 专门提供了一个帮你获URL地址一个服务
App.controller('DemoController', ['$scope', '$location', function($scope, $location) {
$scope.title = '学习$location服务';
// $location就是angularJS提前封装好的
// 提供获取地址相关信息的服务
// console.log($location);
//绝对路径
$scope.absUrl = $location.absUrl();
//相对路径
$scope.url = $location.url();
//主页
$scope.host = $location.host();
//查询字符串
$scope.search = $location.search();
//哈希值
$scope.hash = $location.hash();
//协议
$scope.protocol = $location.protocol();
//端口
$scope.port = $location.port();
}]);

2. $timeout&$interval对原生Javascript中的setTimeout和setInterval进行了封装。

//注入声明依赖
App.controller('DemoController', ['$scope', '$timeout', '$intervall', function($scope, $timeout, $interval){
$timeout(function(){
$scope.time = new Date();
}, 2000); $interval(function(){
$scope.time = new Date();
}, 1000);
}]);

3. $filter在控制器中格式化数据。

//使用过滤器服务
App.controller('DemoController', ['$scope', '$filter', function ($scope, $filter) {
//原始信息
$scope.content = 'my name is angular';
//创建过滤器
var uppercase = $filter('uppercase');
//格式化数据
$scope.content = uppercase($scope.content);
}]);

4. $log打印调试信息

//使用日志服务
App.controller('DemoController', ['$scope', '$log', function(){
$log.log('日志');
$log.info('信息');
$log.warn('警告');
$log.error('错误');
$log.debug('调试');
}]);

5. $http用于向服务端发起异步请求

//使用$http服务
App.controller('DemoController', ['$scope', '$http', '$log', function ($scope, $http, $log) {
//发起异步请求
$http({
method: 'post', //请求方式
url: 'example.php', //请求地址
data: {name: 'angular', age: 10}, //请求主体
headers: { //请求头信息
'Content-Type': 'application/x-www-form-urlencoded'
},
}).success(function (data, states, headers, config) {
//success code
}).error(function(data, states, headers, config){});
//失败回调
}]);
  • 同时还支持多种快捷方式如$http.get()、$http.post()、$http.jsonp。
  • 注:各参数含义见代码注释。

8.2 自定义服务

通过上面例子得知,所谓服务是将一些通用性的功能逻辑进行封装方便使用,AngularJS允许将自定义服务。

1. factory方法

//自定义服务显示日期
App.factory('showTime', ['$filter', function($filter){
var now = new Date();
now = $filter('date')(now, 'yyyy/MM/dd');
return now;
}]);
//声明依赖调用服务
App.controller('DemoController', ['$scope','showTime', function($scope, showTime){
$scope.now = showTime;
}]);

2. service方法

//自定义服务显示日期
App.service('showTime', ['$filter', function($filter){
var now = new Date();
this.now = $filter('date')(now, 'yyyy/MM/dd');
return now;
}]);
//声明依赖调用服务
App.controller('DemoController', ['$scope','showTime', function($scope, showTime){
$scope.now = showTime;
}]);

3. value方法定义常量

//自定义常量服务
App.value('author', 'angular'); //声明依赖调用服务
App.controller('DemoController', ['$scope', 'author', function($scope, auther){
$scope.author = author;
}]);
  • 在介绍服务时曾提到服务本质就是一个对象或函数,所以自定义服务就是要返回一个对象或函数以供使用。

AngularJS——第8章 服务的更多相关文章

  1. 【AngularJS中的自定义服务service VS factory VS provider】---它们的区别,你知道么?

    在介绍AngularJS自定义服务之前,我们先来了解一下AngularJS~ 学过HTML的人都知道,HTML是一门很好的伪静态文本展示设计的声明式语言,但是,要构建WEB应用的话它就显得乏力了. 而 ...

  2. X32位 天堂2 二章/三章 服务端协议号修改方法

    [本方法适合于2004-2006年之间天堂2由初章服务端修改至二章.三章端时协议号匹配问题]服务端版本位32位初章服务端 目前大部分SF用的协议号情况: 服务端是419 客户端是 417 419 42 ...

  3. 【Android】17.0 第17章 服务绑定—本章示例主界面

    分类:C#.Android.VS2015: 创建日期:2016-03-03 一.简介 通过服务绑定(Bound Services),可以轻松实现后台服务与界面(UI)的交互. 二.本章示例主界面 1. ...

  4. AngularJS——第9章 模块加载

    第9章 模块加载 AngularJS模块可以在被加载和执行之前对其自身进行配置.我们可以在应用的加载阶段配置不同的逻辑. [AngularJS执行流程] 启动阶段(startup) 开始 --> ...

  5. AngularJS——第7章 依赖注入

    第7章 依赖注入 AngularJS采用模块化的方式组织代码,将一些通用逻辑封装成一个对象或函数,实现最大程度的复用,这导致了使用者和被使用者之间存在依赖关系. 所谓依赖注入是指在运行时自动查找依赖关 ...

  6. AngularJS——第4章 数据绑定

    第4章 数据绑定 AngularJS是以数据做为驱动的MVC框架,所有模型(Model)里的数据经由控制器(Controller)展示到视图(View)中. 所谓数据绑定指的就是将模型(Model)中 ...

  7. AngularJS中实现日志服务

    本篇体验使用AngularJS自定义一个记录日志的服务. 在AngularJS中,服务的一些写法是这样的: var app = angular.module('app',[]); app.provid ...

  8. angularJS中如何写服务

    服务的用途 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性 服务提供了把特定功能相关联的方法集中在一起的接口 如何创建服务 angularJS ...

  9. AngularJS 不得不了解的服务 $compile 用于动态显示html内容

    项目中一度纠结与AngularJS如何动态显示不同的html内容. 本来是希望直接使用下面的语句来实现: <div> </div> 但是很尴尬的是,这样不能识别出html标签, ...

随机推荐

  1. CSS 的 ID 和 Class 有什么区别,如何正确使用它们。

    css只用class来写并有专门的class通用和私有模块命名, id具有唯一性且优先级太高只作为js操作dom的挂钩全部不添加样式, 如果使用jq或zepto的话,操作的class类名一般也不加样式 ...

  2. Net操作Excel_NPOI

    Npoi 简介 1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.Npoi 下载地址:http://npoi.codep ...

  3. html:meta

    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale= ...

  4. Lazarus 中文汉字解决方案

    使用Lazarus不得不面对编码问题,尤其中文.Lazarus使用的是UTF8编码,而很多windows程序使用的是ANSI编码,编码问题在此不多说大家可以google去. ANSI数据库与Lazar ...

  5. log4j日志输出级别变更

    1.   现阶段log4j日志输出配置 示例:基础服务日志配置 #DEBUG < INFO < WARN < ERROR < FATAL\u65E5\u5FD7\u7684\u ...

  6. checkbox中jQuery对数组和对象的操作

    ------------------------------------------------------------------------------------------ 来段小例子,jQu ...

  7. 吴裕雄 python 机器学习-NBYS(2)

    import matplotlib import numpy as np import matplotlib.pyplot as plt n = 1000 xcord0 = [] ycord0 = [ ...

  8. hdu2421-Deciphering Password-(欧拉筛+唯一分解定理+积性函数+立方求和公式)

    Deciphering Password Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  9. Linux安装face_recgnition

    Ubuntu 3:apt-get install python3.6-dev 4:pip3 install face_recgnition 5:  pip3 install opencv-python ...

  10. frambuffer 相关函数理解

    1. framebuffer_alloc()功能是向内核申请一段大小为sizeof(struct fb_info) + sizeprivate的空间,其中sizeprivate的大小代表设备的私有数据 ...