认识AngularJS
学习AngularJS所需技能
HTML & CSS
JavaScript
为什么要使用AngularJS
如果你想用JavaScript制作动态Web站点,使用AngularJS有以下优点:
- AngularJS能有效组织JavaScript代码
 - AngularJS可以创建快速响应式Web站点
 - AngularJS可以与jQuery同时使用
 - AngularJS便于测试
 
AngularJS呈现Web页面的方式

从图中可知,当浏览器首次加载页面之后,后续对于该页面的数据请求不再是刷新页面,而是从服务端获取数据之后由AngularJS修改DOM并呈现。这个原理从某种程度上和Ajax技术很像,AngularJS是通过内建的$http服务从服务端获取数据的,这个在以后的章节会提到。
AngularJS的几个核心组件
Directive:从字面上较难理解,可以解释为是一些特殊的标记(AngularJS内建的Directives一般以"ng-"开头,也可以自定义Directive,今后的章节会提到),AngularJS可以解析这些标记,从而执行指定的行为。
Module:用来指定AngularJS的作用范围,属于Module范围内的Custom Directives、Controllers、Expressions等,在该Module范围以外无效。
Expression:AngularJS可解析表达式,进行运算、调用变量等操作。
Controller:方法、变量所在地,页面行为和逻辑所处之地。
第一个AngularJS例子
1. 创建html并添加angular.js
<!DOCTYPE html>
<html>
<head>
<script src="/Scripts/angular.js"></script>
</head>
<body>
</body>
</html>
2. 新建javascript脚本,在里面创建Module:student, 定义一个学生jack,在Module:student上创建Controller:myController
<script type="text/javascript">
(function () {
var app = angular.module('student', []); var jack = {
name: "Jack",
age: 18,
sex: 'male',
displayComment: false
}; // 在Module:student上创建Controller:myController
app.controller('myController', function () {
this.student = jack;
});
})();
</script>
3. 完整的body部分的代码
<!--指定body为Module:student的作用域,ng-app为AngularJS内建的Directive-->
<body ng-app="student">
<!--指定该div为myController的作用域,为了便于使用,指定myController的别名为myCtrl-->
<!--ng-controller为AngularJS内建的Directive-->
<div ng-controller="myController as myCtrl">
<!--显示myCtrl中对象student的name属性-->
<p>Name:{{myCtrl.student.name}}</p>
<!--显示myCtrl中对象student的age属性,使用Expression计算15年以后该学生的年龄-->
<p>Age:{{myCtrl.student.age}} will be {{myCtrl.student.age+15}} after 15 years.</p>
<p>Sex:{{myCtrl.student.sex}}</p>
<!--ng-show为AngularJS内建的Directive,用来控制作用标签是否显示在页面上,由于jack的displayComment=false,因此Comments的内容将不会显示在页面上-->
<p ng-show="myCtrol.student.displayComment">Comments:This will not display on page.</p>
</div>
<!-- 这里已经不再myController的作用范围内,Expression不会被AngularJS解析 -->
Name:{{myCtrl.student.name}}
</body>
AngularJS默认只加载第一个Module,如需加载多个Module,需使用angular.bootstrap手动加载,特别注意的是,Module之间是不允许嵌套使用的。由于AngularJS是基于SPA(Single Page Application)原则设计的,因此我想应该遵循此原则,用别的方式避免一个页面使用多个Modules的情况。
4. 以下是单页面使用多个Module的完整代码
<!DOCTYPE html>
<html>
<head>
<script src="/Scripts/angular.js"></script>
<script type="text/javascript">
(function () {
var app1 = angular.module('student1', []); var jack1 = {
name: "Jack1",
age: 18,
sex: 'male',
displayComment: false
}; app1.controller('myController1', function () {
this.student = jack1;
}); var app2 = angular.module('student2', []); var jack2 = {
name: "Jack2",
age: 28,
sex: 'female',
displayComment: true
}; app2.controller('myController2', function () {
this.student = jack2;
}); angular.element(document).ready(function () {
var myDiv1 = document.getElementById("myDiv1");
angular.bootstrap(myDiv1, ["student1", "student2"]); var myDiv2 = document.getElementById("myDiv2");
angular.bootstrap(myDiv2, ["student2"]);
});
})();
</script>
</head>
<body>
<div id="myDiv1">
<div ng-controller="myController1 as myCtrl">
<p>Student1:</p>
<p>Name:{{myCtrl.student.name}}</p>
<p>Age:{{myCtrl.student.age}} will be {{myCtrl.student.age+15}} after 15 years.</p>
<p>Sex:{{myCtrl.student.sex}}</p>
<p ng-show="myCtrol.student.displayComment">Comments:This will not display on page.</p>
</div>
<br />
<br />
<div ng-controller="myController2 as myCtrl2">
<p>Student2:</p>
<p>Name:{{myCtrl2.student.name}}</p>
<p>Age:{{myCtrl2.student.age}} will be {{myCtrl2.student.age+15}} after 15 years.</p>
<p>Sex:{{myCtrl2.student.sex}}</p>
<p ng-show="myCtrl2.student.displayComment">Comments:This will not display on page.</p>
</div>
</div>
<br />
<br />
<div id="myDiv2">
<div ng-controller="myController2 as myCtrl2">
<p>Student2:</p>
<p>Name:{{myCtrl2.student.name}}</p>
<p>Age:{{myCtrl2.student.age}} will be {{myCtrl2.student.age+15}} after 15 years.</p>
<p>Sex:{{myCtrl2.student.sex}}</p>
<p ng-show="myCtrl2.student.displayComment">Comments:This will not display on page.</p>
</div>
</div>
</body>
</html>
好了,至此为止,我们已经成功创建了第一个AngularJS的应用,你也应该感受到了AngularJS的强大之处。
参考资料
CodeSchool快速入门视频(英文版):http://campus.codeschool.com/courses/shaping-up-with-angular-js/intro
ngApp:https://docs.angularjs.org/api/ng/directive/ngApp
Solution of multi modules on one page: http://www.simplygoodcode.com/2014/04/angularjs-getting-around-ngapp-limitations-with-ngmodule/
认识AngularJS的更多相关文章
- 通过AngularJS实现前端与后台的数据对接(二)——服务(service,$http)篇
		
什么是服务? 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性. 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化) ...
 - AngularJs之九(ending......)
		
今天继续angularJs,但也是最后一篇关于它的了,基础部分差不多也就这些,后续有机会再写它的提升部分. 今天要写的也是一个基础的选择列表: 一:使用ng-options,数组进行循环. <d ...
 - AngularJS过滤器filter-保留小数,小数点-$filter
		
AngularJS 保留小数 默认是保留3位 固定的套路是 {{deom | number:4}} 意思就是保留小数点 的后四位 在渲染页面的时候 加入这儿个代码 用来精确浮点数,指定小数点 ...
 - Angular企业级开发(1)-AngularJS简介
		
AngularJS介绍 AngularJS是一个功能完善的JavaScript前端框架,同时是基于MVC(Model-View-Controller理念的框架,使用它能够高效的开发桌面web app和 ...
 - 模拟AngularJS之依赖注入
		
一.概述 AngularJS有一经典之处就是依赖注入,对于什么是依赖注入,熟悉spring的同学应该都非常了解了,但,对于前端而言,还是比较新颖的. 依赖注入,简而言之,就是解除硬编码,达到解偶的目的 ...
 - 步入angularjs directive(指令)--点击按钮加入loading状态
		
今天我终于鼓起勇气写自己的博客了,激动与害怕并存,希望大家能多多批评指导,如果能够帮助大家,也希望大家点个赞!! 用angularjs 工作也有段时间了,总体感觉最有挑战性的还是指令,因为没有指令的a ...
 - 玩转spring boot——结合AngularJs和JDBC
		
参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...
 - 玩转spring boot——结合jQuery和AngularJs
		
在上篇的基础上 准备工作: 修改pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
 - 通过AngularJS实现前端与后台的数据对接(一)——预备工作篇
		
最近,笔者在做一个项目:使用AngularJS,从而实现前端与后台的数据对接.笔者这是第一次做前端与后台的数据对接的工作,因此遇到了许多问题.笔者在这些问题中,总结了一些如何实现前端与后台的数据对接的 ...
 - AngularJS 系列 学习笔记 目录篇
		
目录: AngularJS 系列 01 - HelloWorld和数据绑定 AngularJS 系列 02 - 模块 (持续更新)
 
随机推荐
- CentOS7+Nginx+多个Tomcat配置
			
转载自:https://blog.csdn.net/name_chc/article/details/73332272:亲测可用,加了一些注释: 配置多个tomcat转发 另附上tomcat启动慢的解 ...
 - Android继承BaseAdapter时要重写的函数的说明
			
原文来自:http://www.2cto.com/kf/201405/299601.html,我自己做了一些修改 Android中继承BaseAdapter后需要重写四个函数,但一般还要写一个构造函数 ...
 - Android 显示确认对话框
			
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("你确定要退出吗?" ...
 - Android开发消除横向排列的多个Button之间的空隙
			
一.问题重述 摘要里描述的可能不太清楚,问题如下图: 如何消除Button1和Button2之间的空隙,以及Button与左右边界之间的空隙? 二.问题根源 这里出现的空隙其实是Button的背景图片 ...
 - WebAPI开发中的定时处理
			
https://blog.csdn.net/lordwish/article/details/77931897
 - .Net Core 跨平台应用使用串口、串口通信 ,可能出现的问题、更简洁的实现方法
			
前些天在学习在 .NET Core下,跨平台使用串口通讯,有一篇文章说到在Linux/物联网下,实现通讯. 主要问题出现在以下两个类库 SerialPortStream flyfire.CustomS ...
 - NetCore偶尔有用篇:NetCore项目发布为Nuget包
			
一.简介 1.nuget大家已经不陌生. 2.netcore默认引用便是nuget,并处理了嵌套关系. 3.netcore已经支持直接编译生成nuget包. 4.本文介绍如何把自己建立的项目发布为nu ...
 - Spring Batch学习笔记(一)
			
Spring Batch简介 Spring Batch提供了可重复使用的功能,用来处理大量数据.包括记录.跟踪,事务管理,作业处理统计,作业重启,跳过和资源管理. 此外还提供了更高级的技术服务和功能, ...
 - CodeForces 540C  Ice Cave  (BFS)
			
http://codeforces.com/problemset/problem/540/C Ice Cave Time Limit:2000MS Memory Limit:262 ...
 - AI贪吃蛇前瞻——基于Dijkstra算法的最短路径问题
			
在贪吃蛇流程结构优化之后,我又不满足于亲自操刀控制这条蠢蠢的蛇,干脆就让它升级成AI,我来看程序自己玩,哈哈. 一.Dijkstra算法原理 作为一种广为人知的单源最短路径算法,Dijkstra用于求 ...