angularJs 中controller与sever
网上找到的一个例子,感觉对于初学者理解将controller抽成服务有帮助。主要是方便理解什么时候应该来做服务。
html部分
<!DOCTYPE html>
<html ng-app="invoice1">
<head>
<script src="../angular.min.js"></script>
<script src="controllers.js"></script>
</head>
<body>
<div ng-controller="priceController as price">
<b>订单:</b>
<div>
数量: <input type="number" ng-model="price.qty" required >
</div>
<div>
单价: <input type="number" ng-model="price.cost" required >
<select ng-model="price.inCurr">
<option ng-repeat="c in price.currencies">{{c}}</option>
</select>
</div>
<div>
<b>总价:</b>
<span ng-repeat="c in price.currencies">{{c}}{{price.total(c)|currency}}
</span>
<button class="btn" ng-click="price.pay()">支付</button>
</div>
<hr/>
<p>控制器实例</p>
<p>{{price}}</p>
</div>
</body>
</html>
主要是算总价:总价=单价*数量*不同货币汇率
angular.module('invoice1', [])
.controller('priceController',function() {
this.qty = 1;
this.cost = 2;
this.inCurr = 'EUR';
this.currencies = ['USD', 'EUR', 'CNY'];
this.usdToForeignRates = {
USD: 1,
EUR: 0.74,
CNY: 6.09
};
this.convert=function(amount, inCurr, outCurr) {
return amount * this.usdToForeignRates[outCurr] * 1 / this.usdToForeignRates[inCurr];
};
this.total = function total(outCurr) {
return this.convert(this.qty * this.cost, this.inCurr, outCurr);
};
this.pay = function pay() {
window.alert("谢谢!");
};
});
这个控制器内部可以分成2个部分,一部分是与视图相关的(单价,数量),一部分与视图无关的逻辑计算(计算公式)。因为单价,数量的变化会直接影响视图(结果),而计算公式是不变的,不直接影响视图即convert()函数。如果有多个控制器需要使用这个计算公式,就非常适合将其抽成服务来使用。
angular.module('invoice1', ["severModule"])
.controller('priceController', ["mysever",function(mysever) {
this.qty = 1;
this.cost = 2;
this.inCurr = 'EUR';
this.currencies = mysever.currencies;
this.total = function total(outCurr) {
return mysever.convert(this.qty * this.cost, this.inCurr, outCurr);
};
this.pay = function pay() {
window.alert("谢谢!");
};
}]);
简化后的控制器,同时注入了服务severModule,现在控制器只是处理了视图部分(计算了数量和单价的乘积),然后就是使用服务中的函数进行计算;
angular.module('severModule', [])
.factory('mysever', function() {
var currencies = ['USD', 'EUR', 'CNY'],
usdToForeignRates = {
USD: 1,
EUR: 0.74,
CNY: 6.09
};
return {
currencies: currencies,
convert: convert
};
function convert(amount, inCurr, outCurr) {
return amount * usdToForeignRates[outCurr] * 1 / usdToForeignRates[inCurr];
}
});
服务内置了三种货币的汇率,根据指定的货币来计算其他货币的价格。提供一个对象(currencies和函数(convert)给控制器使用
angularJs 中controller与sever的更多相关文章
- Angularjs中controller的三种写法
在Angular中,Directive.Service.Filter.Controller都是以工厂方法的方式给出,而工厂方法的参数名对应着该工厂方法依赖的Service.angularjs中cont ...
- AngularJS 中 Controller 之间的通信
用 Angular 进行开发,基本上都会遇到 Controller 之间通信的问题,本文对此进行一个总结. 在 Angular 中,Controller 之间通信的方式主要有三种: 1)作用域继承.利 ...
- angularJS中controller的通信
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- angularJs中$controller的使用
$controller的使用 参考:https://stackoverflow.com/questions/27866620/can-someone-provide-a-use-case-for-th ...
- AngularJS之指令中controller与link(十二)
前言 在指令中存在controller和link属性,对这二者心生有点疑问,于是找了资料学习下. 话题 首先我们来看看代码再来分析分析. 第一次尝试 页面: <custom-directive& ...
- angularJS中directive与controller之间的通信
当我们在angularJS中自定义了directive之后需要和controller进行通讯的时候,是怎么样进行通讯呢? 这里介绍3种angular自定义directive与controller通信的 ...
- AngularJS中使用Directive、Controller、Service
AngularJS是一款非常强大的前端MVC框架.同时,它也引入了相当多的概念,这些概念我们可能不是太熟悉. (1)Directive 指令 (2)Controller 控制器 (3)Service ...
- AngularJS中get请求URL出现跨域问题
今天早上帮助同学看了一个AngularJS的问题,主要是请求中出现了跨域访问,请求被阻止. 下面是她给我的代码: <html lang="en" ng-app="m ...
- AngularJS 中的Promise --- $q服务详解
先说说什么是Promise,什么是$q吧.Promise是一种异步处理模式,有很多的实现方式,比如著名的Kris Kwal's Q还有JQuery的Deffered. 什么是Promise 以前了解过 ...
随机推荐
- 多进程,多线程,使用sqlalchemy 创建引擎(单例模式),闭包装饰器承载数据库会话,装饰模型类的类方法
python 多进程,多线程,使用 sqlalchemy 对数据库进行操作 创建引擎 & 获取数据库会话: 使用类的方式,然后在对象方法中去创建数据库引擎(使用单例,确保只创建一个对象,方法里 ...
- Jerry Wang从2017年到2019年的自由泳学习笔记
打腿 把注意力调整到脚部,尽量不要让他打出水面,因为在空气中大腿完全是无用功,但是如果只是脚跟出水一点,倒也没什么关心,但是主观上,要控制一下,如果你听到你的打腿是"咚咚咚咚"这样 ...
- JavaScript中进制和字符编码问题
1.进制: JavaScript中允许使用字面量的形式声明不同进制的数字: var a = 0b10; // 2 声明一个二进制 var b = 010; // 8 八进制,严格模式下会报错 var ...
- MongoDB官方推荐的GUI工具-Compass的使用
探索和操作MongoDB数据的最简单方法 用于MongoDB的GUI.可视化地查看数据.以秒为单位运行临时查询.使用完整的CRUD功能与数据交互.查看和优化查询性能.可在Linux.Mac或Windo ...
- 【Mybatis】 入门
一.概述 1.1 JDBC 1.2 JDBC编程中问题 1.3 MyBatis介绍 1.4 Mybatis架构 二.MyBatis入门程序 2.1 需求 2.2 引入MyBatis依赖 2.3 配置 ...
- SpringBoot Kafka 整合集成 示例教程
1.使用IDEA新建工程,创建工程 springboot-kafka-producer 工程pom.xml文件添加如下依赖: <!-- 添加 kafka 依赖 --> <depend ...
- 4.BeanFactory和ApplicationContext的区别
ApplicationContext和BeanFactory都是用于加载Bean的, 但是二者之间存在区别, ApplicationContext能够提供更多的扩展功能. 1).BeanFactory ...
- rsync详细解读
本文通过示例详细分析rsync算法原理和rsync的工作流程,是对rsync官方技术报告和官方推荐文章的解释.本文不会介绍如何使用rsync命令(见rsync基本用法),而是详细解释它如何实现高效的增 ...
- Selenium常用API的使用java语言之4-环境安装之Selenium
1.通过jar包安装 点击Selenium下载 链接 你会看到Selenium Standalone Server的介绍: The Selenium Server is needed in order ...
- 淘宝上的大智慧L2数据,月卡最便宜是8元钱,这个也可以获取BBD、DDX等数据!
Want:从顶牛股网上下载DDX数据. 1.下载历史DDE数据:获取最近120个交易日的DDE数据 #define SFURL_DNG_SINGLEL"http://www.dingniug ...