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框架. 本文是入门篇.笔者认为亲自动手写代码做实验,是最有效最扎实的学习途径,而搭建开发环境是学习一门新技术最需要先学会的技能,是入门的前提. ...
随机推荐
- nohup程序后台执行
Linux常用命令,用于不挂断的执行程序. nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令.该命令可以在你退出帐户/关闭终端之后继续运行相应 ...
- .Net中的AOP系列之构建一个汽车租赁应用
返回<.Net中的AOP>系列学习总目录 本篇目录 开始一个新项目 没有AOP的生活 变更的代价 使用AOP重构 本系列的源码本人已托管于Coding上:点击查看. 本系列的实验环境:VS ...
- 在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误
1.安装mysql workbench,提示未安装软件包 libpng12-0 下载了MySQL Workbench 6.3.8 在安装的时候报错: -1ubu1604-amd64.deb 提示: ...
- SQL Server-聚焦APPLY运算符(二十七)
前言 其实有些新的特性在SQL Server早就已经出现过,但是若非系统的去学习数据库你会发现在实际项目中别人的SQL其实是比较复杂的,其实利用新的SQL Server语法会更加方便和简洁,从本节开始 ...
- ASP.NET MVC开发:Web项目开发必备知识点
最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...
- c# Enumerable中Aggregate和Join的使用
参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/asp.net-core-environment.html http://www.yuanjiaochen ...
- maven的pom.xml关系依赖书写顺序
今天遇到了一个情况,以前代码编译没有问题,升级了hbase客户端phoenix驱动,又调整了thrift的关系依赖的位置,放到了这个驱动后面. 如下: 导致了一个thrift接口类编译报错: 检查这个 ...
- git和pycharm管理代码
首先明白三个概念,服务器代码库,本地代码库,和正在coding的项目. coding完毕后,先通过commit提交到本地代码库,然后通过push再提交server的代码库 git步骤 git c ...
- windows10安装mysql5.7.17是这样安装的吗?
操作 全允许
- Performance Tuning
本文译自Wikipedia的Performance tuning词条,原词条中的不少链接和扩展内容非常值得一读,翻译过程中暴露了个人工程学思想和英语水平的不足,翻译后的内容也失去很多准确性和丰富性,需 ...