(二)Angularjs - 入门(2)
AngularJS AJAX
AngularJS提供了$http控制,可以用来获取服务器端的数据。服务器通过一个数据库的读取操作来获取需要的数据。注意AngularJS需要JSON格式的数据。一旦数据准备完毕,$http可以使用如下代码获取数据:
//后台提供的ajax数据提供url
var url="http://cdn.gbtags.com/gblibraryassets/libid102/jsondata.jsp"; //使用http get方法获取数据,并且使用回调函数设置到students中
$http.get(url).success(function(response) {
$scope.students = response;
});
说明:
jsondata.jsp提供了后台的JSON数据$http服务器
通过一个ajax调用将http响应中的数据添加到正确的students中
students模型绘制数据到HTML页面的数据表里。
AngularJS 视图配置
AngularJS提供了ng-view和ng-template声明指令,和$routeProvider服务
ng-view 声明指令
ng-view主要用来创建一个可以展示页面对应生成视图的区域,这些视图可以使用配置方式生成
在主模块中定义一个ng-view的div,如下:
<div ng-app="mainApp">
...
<div ng-view></div>
...
</div>
ng-template 声明指令
ng-template通过script标签来创建生成的HTML视图内容。包含了id属性,$routeProvider使用这个属性用来映射视图到对应的控制器
主模块中定义一个script区域作为ng-template
<div ng-app="mainApp">
...
<!-- 定义视图相关模板 -->
<script type="text/ng-template" id="add.htm">
<h2> 添加操作 </h2>
{{message}}
</script>
<script type="text/ng-template" id="view.htm">
<h2> 阅读操作 </h2>
{{message}}
</script> </div>
$routeProvider服务
$routeProvider是一个关键服务,用来设置URL相关配置,映射到对应的HTML页面或者ng-template,并且绑定到指定控制器
<div ng-app="mainApp" class="ng-scope"> <!-- 定义两个视图操作 -->
<p><a href="#add">添加</a></p>
<p><a href="#view">阅读</a></p>
<p><a href="#undefine">其它</a></p> <hr class="clearfix"> <!-- 定义视图 -->
<!-- ngView: --><div ng-view="" class="ng-scope">
<h2 class="ng-scope"> +添加操作 </h2><span class="ng-binding ng-scope">
这里演示视图的添加操作
</span></div> <!-- 定义视图相关模板 -->
<script type="text/ng-template" id="add.htm">
<h2> +添加操作 </h2>
{{message}}
</script> <script type="text/ng-template" id="view.htm">
<h2> #阅读操作 </h2>
{{message}}
</script>
</div>
var mainApp = angular.module("mainApp", ['ngRoute']);
//$routeProvider用来设置URL相关配置,映射到对应的HTML页面或者ng-template,并且绑定到指定控制器
mainApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/add', {
templateUrl: 'add.htm',
controller: 'AddController'
}).
when('/view', {
templateUrl: 'view.htm',
controller: 'ViewController'
}).
otherwise({
redirectTo: '/add'
});
}]);
mainApp.controller('AddController', function($scope) {
$scope.message = "这里演示视图的添加操作";
});
mainApp.controller('ViewController', function($scope) {
$scope.message = "这里演示视图的阅读操作";
});
说明:
$routeProvider在mainApp模块中使用'$routeProvider'关键字定义了一个方法
$routeProvider定义了一个URL“/add”,用来映射到"add.htm"。add.htm也可以展现到主HTML页面中。如果HTML页面没有定义,那么ng-template需要在id="add.htm"中被使用。
如果没有其它的视图定义,那么otherwise将设置缺省的视图,即“add.htm”
AngulaJS 服务
AngularJS使用服务架构来支持关键点分离的概念。服务是Javascript方法,用来执行特定的功能。这样生成独立的单元,方便测试和维护。控制器根据需要可以调用需要的服务。服务通常使用以来注入方式导入。
AngularJS提供了很多内建的服务,例如,$http,$route,$window,$location等等。每一个服务都对应一个指定的方法。例如$http用来创建服务器端AJAX调用,$route用来定义相关路由信息等等。所有的服务都使用$符号开始。
两种方式创建服务
- 工厂方法(Factory)
- 服务方法(Service)
使用工厂方法
这里我们定义一个工厂,并且添加方法:
var mainApp = angular.module("mainApp", []);
mainApp.factory('MathService', function() {
var factory = {};
factory.multiply = function(a, b) {
return a * b
}
return factory;
});
使用服务方法
这里定义一个服务,并且赋予方法。我们也可以注入已经存在的服务
mainApp.service('CalcService', function(MathService){
this.square = function(a) {
return MathService.multiply(a,a);
}
});
完整代码:
<div ng-app="mainApp" ng-controller="CalcController" class="ng-scope">
<p>输入一个数值: </p>
<p><input type="number" ng-model="number" class="ng-valid ng-valid-number ng-dirty"></p>
<button ng-click="square()">计算平方 X<sup>2</sup></button>
<p class="ng-binding">计算结果: </p>
</div>
mainApp.factory('MathService', function() {
var factory = {};
factory.multiply = function(a, b) {
return a * b
}
return factory;
});
mainApp.service('CalcService', function(MathService){
this.square = function(a) {
return MathService.multiply(a,a);
}
});
mainApp.controller('CalcController', function($scope, CalcService) {
$scope.square = function() {
$scope.result = CalcService.square($scope.number);
}
});
AngularJS 依赖注入
依赖注入是一个软件设计思想,代表组件间提供依赖而非硬编码。依赖于定位依赖并且让组件可配置。这种方式可以帮助组件重用,高可维护并且可测试。
AngularJS提供了超棒的依赖注入机制。提供如下核心组件用来作为依赖注入:
- Value
- Factory
- Service
- Provider
- Constant
- value
value
value是一个简单的JS对象,在配置阶段用来传递数值到控制器
//定义模块
var mainApp = angular.module("mainApp", []);
//创建一个数值对象作为缺省的输入
mainApp.value("defaultInput", 5);
...
//使用缺省名字"defaultInput"注入值到控制器
mainApp.controller('CalcController', function($scope, CalcService, defaultInput) {
$scope.number = defaultInput;
$scope.result = CalcService.square($scope.number); $scope.square = function() {
$scope.result = CalcService.square($scope.number);
}
});
Factory
一个用来返回值的方法。一旦服务或者控制器需要就创建了一个需要的值。这里使用工厂方法计算并且返回值
//定义模块
var mainApp = angular.module("mainApp", []);
//创建工厂"MathService",提供一个方法来生成平方
mainApp.factory('MathService', function() {
var factory = {};
factory.multiply = function(a, b) {
return a * b
}
return factory;
}); //注入工厂“MathService”到服务,并且多次使用这个方法
mainApp.service('CalcService', function(MathService){
this.square = function(a) {
return MathService.multiply(a,a);
}
});
Service
一个单例的Javascript对象,包含了一系列的方法执行特定任务。Service是使用service方法定义,并且注入到控制器
//定义模块
var mainApp = angular.module("mainApp", []);
...
//创建一个包含square方法的服务
mainApp.service('CalcService', function(MathService){
this.square = function(a) {
return MathService.multiply(a,a);
}
});
//注入服务"CalcService"到控制器
mainApp.controller('CalcController', function($scope, CalcService, defaultInput) {
$scope.number = defaultInput;
$scope.result = CalcService.square($scope.number); $scope.square = function() {
$scope.result = CalcService.square($scope.number);
}
});
AngularJS 依赖注入
Value
一个简单的JS对象,在配置阶段用来传递数值到控制器(配置阶段指AngularJS启动自身)
//定义模块
var mainApp = angular.module("mainApp", []);
//创建一个数值对象作为缺省的输入
mainApp.value("defaultInput", 5);
...
//使用缺省名字"defaultInput"注入值到控制器
mainApp.controller('CalcController', function($scope, CalcService, defaultInput) {
$scope.number = defaultInput;
$scope.result = CalcService.square($scope.number); $scope.square = function() {
$scope.result = CalcService.square($scope.number);
}
});
Factory
一个用来返回值的方法。一旦服务或者控制器需要就创建了一个需要的值。这里使用工厂方法计算并且返回值
//定义模块
var mainApp = angular.module("mainApp", []);
//创建工厂"MathService",提供一个方法来生成平方
mainApp.factory('MathService', function() {
var factory = {};
factory.multiply = function(a, b) {
return a * b
}
return factory;
}); //注入工厂“MathService”到服务,并且多次使用这个方法
mainApp.service('CalcService', function(MathService){
this.square = function(a) {
return MathService.multiply(a,a);
}
});
...
Service
一个单例的Javascript对象,包含了一系列的方法执行特定任务。Service是使用service方法定义,并且注入到控制器
//定义模块
var mainApp = angular.module("mainApp", []);
...
//创建一个包含square方法的服务
mainApp.service('CalcService', function(MathService){
this.square = function(a) {
return MathService.multiply(a,a);
}
});
//注入服务"CalcService"到控制器
mainApp.controller('CalcController', function($scope, CalcService, defaultInput) {
$scope.number = defaultInput;
$scope.result = CalcService.square($scope.number); $scope.square = function() {
$scope.result = CalcService.square($scope.number);
}
});
Provider
主要用来在配置阶段创建Service,Factory等等。下面的script可以用来创建MathService。Provider是一个指定的工厂方法,包含一个get方法来返回value/service/factory
//定义模块
var mainApp = angular.module("mainApp", []);
... //创建一个使用provider的服务,这个服务定义了一个方法square来返回数字的平方值
mainApp.config(function($provide) {
$provide.provider('MathService', function() {
this.$get = function() {
var factory = {};
factory.multiply = function(a, b) {
return a * b;
}
return factory;
};
});
});
Constants
用来在配置阶段传递数值,注意这个常量在配置阶段不可使用
mainApp.constant("configParam", "constant value");
(二)Angularjs - 入门(2)的更多相关文章
- AngularJS入门心得4——漫谈指令scope
上篇<AngularJS入门心得3——HTML的左右手指令>初步介绍了指令的概念和作用.已经和指令打过一个照面,就不会那么陌生了,今天主要介绍的是一个困扰了我很久终于想通的问题,这个问题与 ...
- AngularJS入门心得3——HTML的左右手指令
在<AngularJS入门心得1——directive和controller如何通信>我们提到“AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文 ...
- AngularJS入门心得2——何为双向数据绑定
前言:谁说Test工作比较轻松,最近在熟悉几个case,差点没疯.最近又是断断续续的看我的AngularJS,总觉得自己还是没有入门,可能是自己欠前端的东西太多了,看不了几行代码就有几个常用函数不熟悉 ...
- AngularJS入门心得1——directive和controller如何通信
粗略地翻了一遍<JavaScript DOM编程艺术>,就以为可以接过AngularJS的一招半式,一个星期过去了,我发现自己还是Too Young,Too Simple!(刚打照面的时候 ...
- 【转载】图灵AngularJS入门教程
摘自图灵的AngularJS入门教程:http://www.ituring.com.cn/article/13471 感觉非常不错,所以推荐到首页一下! (一)Hello World! 开始学习Ang ...
- 《AngularJS入门与进阶》图书简介
一.图书封面 二.图书CIP信息 图书在版编目(CIP)数据 AngularJS入门与进阶 / 江荣波著. – 北京 : 清华大学出版社, 2017 ISBN 978-7-302-46074-9 Ⅰ. ...
- 跟我学AngularJs:AngularJs入门及第一个实例
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:主要给大家介绍了AngularJs及其特性,并以3个实例来做说明. 本教程使用Angul ...
- (一)Angularjs - 入门
AngularJS进行应用开发的一个重要的思维模式: 从构造声明式界面入手 ng-app: 这个指定定义并且关联了使用angularJS的HTML页面部分 ng-model: 这个指定定义并绑定Ang ...
- XML学习总结(二)——XML入门
XML学习总结(二)——XML入门 一.XML语法学习 学习XML语法的目的就是编写XML 一个XML文件分为如下几部分内容: 文档声明 元素 属性 注释 CDATA区 .特殊字符 处理指令(proc ...
- AngularJS入门教程:日期格式化
AngularJS入门教程:日期格式化[转载] 本地化日期格式化: ({{ today | date:'medium' }})Nov 24, 2015 2:19:24 PM ({{ today | d ...
随机推荐
- Forms & HTML 组件 - laravelcollective/html
简书链接 :Forms & HTML 组件 - laravelcollective/html 安装 方法一: composer require laravelcollective/html 方 ...
- [转载] $\mathrm{Jordan}$标准型的介绍
本文转载自陈洪葛的博客$,$ 而实际上来自xida博客朝花夕拾$,$ 可惜该博客已经失效 $\mathrm{Jordan}$ 标准形定理是线性代数中的基本定理$,$ 专门为它写一篇长文好像有点多余$: ...
- 完美解决VMware Workstation : Could not open /dev/vmmon: No such file or directory
root@tiger:/usr/bin# cd /etc/init.d root@tiger:/usr/bin# sudo mv /usr/lib/vmware/modules/binary /usr ...
- (2015年郑州轻工业学院ACM校赛题) C 数列
在我们做完B题之后就去看C题了, 发现很多人都已经做出来了, 并且一血还是我们学弟拿的, 感觉这题不难, 我们举了几个例子之后发现全是Alice 然后我们就决定意淫一下,试试看! 没想到就A了 - . ...
- STL_iterator迭代器(1)——迭代器的分类
一.容器迭代器 尽管C++指针也是迭代器,但用的更多的是容器迭代器.容器迭代器用法和iterdemo.cpp一样,但和将迭代器申明为指针变量不同的是,你可以使用容器类方法来获取迭代器对象.两个典型的容 ...
- Python学习打算
背景:本人用python写自动化脚本,基础的东西都会啦.但是呢,鉴于年轻应该好好学习,所以打算再买一本python书籍用来精读. Python 好的博客: Python快速教程(好多,一点也不快速): ...
- Linux 下最为人熟知的解压缩工具
很多时候,通过互联网发送或接收大文件和图片是一件令人头疼的事.压缩及解压缩工具正好可以应对这个问题.下面让我们快速浏览一些可以使得我们的工作更加轻松的开源工具. Tar Tar 由 ‘Tape arc ...
- Java实现文件的预览
最近项目需要用到文件的预览功能,就开始在网上收集资料,学习了几种文件预览的方法.我集成到我项目内测试的有以下三种,最后使用的是第三种: 直接使用别人提供的服务 例如:office web 365 使用 ...
- 深入理解jdk和jre(转)
转自:http://ihyperwin.iteye.com/blog/1513754 大家肯定在安装JDK的时候会有选择是否安装单独的jre,一般都会一起安装,我也建议大家这样做.因为这样更能帮助大家 ...
- 百度地图点聚合MarkerClusterer,性能优化
参考文献:http://www.cnblogs.com/lightnull/p/6184867.html 百度的点聚合算法 是基于方格和距离的聚合算法,即开始的时候地图上没有任何已知的聚合点,然后遍历 ...