Angular Service入门
1.Angular内置service
Angular为了方便开发者开发,本身提供了非常多的内置服务。可以通过https://docs.angularjs.org/api/ng/service查看AngularJS提供的内置服务。在企业级开发中,常用的服务有以下这些:
- $cacheFactory 缓存服务
- $compile 编译服务
- $filter 通过 $filter 服务可以格式化输出数据,也可以对数据进行过滤操作
- $http AngularJS内置的核心的服务,主要和后台请求相关
- $location 基于window.location的Angular版本,功能更强大。比如路由地址的切换: $location.path('/home')
- $log 开发过程中用到的多,输入错误和调试日志。和Chrome浏览器的console.log()、console.debug()等类似
- $q 服务主要是用于异步函数返回一个promise,在路由中resovle属性用的较多
- $rootScope 一个应用只有一个 $rootScope,该服务可以用于每个页面都需要使用的公共数据或者变量,但是开发过程中,建议尽量少用 $rootScope,调试起来不方便。因为它是一个全局变量。
2.Angular自定义Service
可以通过多种方式方式定义Service,常用的使用factory来定义一个service。代码如下:
app.factory('dataService', function () {
var appVerison = "1.0";
var showVersion = function () {
return appVerison;
};
return {
appTitle: "Decorators Demo",
showVersion: showVersion
}
});
3.在控制器之间共享数据使用Service
控制器和控制器之间共享数据也有多种方式,将变量或者函数绑定$rootScope是一种常见的方式,但是不推荐。常见的情况是使用Service来共享多个controller之间的数据。一个记录图书阅读的系统,需要记录最后一次编辑的图书信息。
在BooksController.js里面读取currentUser服务,在编辑的页面给currentUser服务里面的lastBookEdited对象赋值。
定义currentUser服务
angular.module('app')
.factory('currentUser', function () {
var lastBookEdited = {};
return {
lastBookEdited: lastBookEdited
}
});
在EditController.js
dataService.getBookByID($routeParams.bookId)
.then(function (response) {
vm.currentBook = response;
//将当前编辑的图书对象赋值给lastBookEdited
currentUser.lastBookEdited=vm.currentBook;属性
})
.catch(function (response) {
$log.error(response);
});
BooksController.js
vm.currentUser=currentUser;
模板books.html
<div>
{{books.summaryData.bookCount}} Books --
{{books.summaryData.readerCount}} Readers --
{{books.summaryData.grandTotalMinutes}} Total Minutes Read
</div>
4.Decorators(修饰)在Angular Service的使用
在实际开发过程中,我们需要对自己的服务进行增加一下方法,或者对引入的第三方服务增加一下方法,开发者可以不需要修改之前的源代码,而是可以在运行时为Service增加方法。这里需要用到Decorator-修饰。修饰模式是软件设计里面一种经典设计模式,在高级的面向对象语言,比如Java、C#等都有实现。AngularJS代码举例:
var app = angular.module('app', []);
app.controller('MainCtrl', function ($scope, dataService) {
$scope.app = dataService;
});
app.factory('dataService', function () {
var appVerison = "1.0";
var showVersion = function () {
return appVerison;
};
return {
appTitle: "Decorators Demo",
showVersion: showVersion
}
});
app.config(function ($provide) {
$provide.decorator('dataService', function ($delegate) {
$delegate.sayHello = function () {
return "a new function of 'dataService'";
};
return $delegate;
});
});
项目地址:https://github.com/cmssfe/angular-js-path/tree/master/angularjs-services-in-depth/BookLogger
参考网址
Angular Service入门的更多相关文章
- angular service provider
关于 angular service factory provider 方面有很多,我也来写一篇加深下印象 provider 是一切方法的基础,所以功能也最强,provider 用来定义一个可以被 ...
- (转)Web Service入门简介(一个简单的WebService示例)
Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...
- Angular service, 服务
早上开车上班, 发现车快没油了, 于是拐进加油站. 有一辆出租车也在加油.. Angular service在一个应用里是以单例形式存在的. 这个单例的实例是由service factory( ...
- Web Service入门简介(一个简单的WebService示例)
Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...
- Angular 快速入门
Angular 快速入门 AngularJS 官方网址 Angular:https://www.angular.cn/ Angular官网:https://angularjs.org/ Angular ...
- AngularJS学习之 ngTable 翻页 功能以及利用angular service准备测试数据
1.官网链接 https://github.com/esvit/ng-table#4.0.0 2.安装ngTable后,一定要记得先注册到自己的项目 .module('pttengApp', [ ' ...
- Angular.js 入门(一)
最近在学习angular.js,为此方便加深对angular.js前端框架的理解,因此写下这篇angular.js入门 首先介绍下什么是angular.js? AngularJS 是一个 JavaSc ...
- Angular 从入坑到挖坑 - Angular 使用入门
一.Overview angular 入坑记录的笔记第一篇,完成开发环境的搭建,以及如何通过 angular cli 来创建第一个 angular 应用.入坑一个多星期,通过学习官方文档以及手摸手的按 ...
- (转载)从Java角度理解Angular之入门篇:npm, yarn, Angular CLI
本系列从Java程序员的角度,带大家理解前端Angular框架. 本文是入门篇.笔者认为亲自动手写代码做实验,是最有效最扎实的学习途径,而搭建开发环境是学习一门新技术最需要先学会的技能,是入门的前提. ...
随机推荐
- Android ViewPager打造3D画廊
本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 网上有很多关于使用Gallery来打造3D画廊的博客,但是在关于Gallery的官方说法中表明: This cl ...
- WPF样式之画刷结合样式
第一种画刷,渐变画刷GradientBrush (拿线性渐变画刷LinearGradientBrush(其实它涵盖在GradientBrush画刷内.现在拿他来说事.),还有一个圆心渐变画刷Radia ...
- mount报错: you must specify the filesystem type
在linux mount /dev/vdb 到 /home 分区时报错: # mount /dev/vdb /homemount: you must specify the filesystem ty ...
- PHP 设计模式概述
一.设计模式(Design pattern)是什么? 设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. ...
- 学习C的笔记
[unsigned] 16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535.由于在计算机中,整数是以补码形式存放的.根据最高位的不同 ...
- Android中Activity的四大启动模式实验简述
作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握.今天我们就来通过实验演示,来帮助大家理解Activ ...
- 用Swagger生成接口文档
Swagger简介 在系统设计的时候,各个应用之间往往是通过接口进行交互的.因此接口的定义在整个团队中就变得尤为重要.我们可以把接口的规范用接口描述语言进行描述,然后Swagger可以根据我们定义的接 ...
- MySQL加密
MySQL字段加密和解密 1.加密:aes_encrypt('admin','key') 解密:aes_decrypt(password,'key') 2.双向加密 通过密钥去加密,解密的时候的只有知 ...
- Linux系统中的Device Mapper学习
在linux系统中你使用一些命令时(例如nmon.iostat 如下截图所示),有可能会看到一些名字为dm-xx的设备,那么这些设备到底是什么设备呢,跟磁盘有什么关系呢?以前不了解的时候,我也很纳闷. ...
- [jquery]jquery正则表达式验证(手机号、身份证号、中文名称)
数字判断方法:isNaN()函数 test()方法 判断字符串中是否匹配到正则表达式内容,返回的是boolean值 ( true / false ) // 验证中文名称 function isChin ...