认识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 - 模块 (持续更新)
随机推荐
- 20155210 2016-2017-2 《Java程序设计》第7周学习总结
20155210 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量: GMT(Greenwich Mean Time)时间:现在不是标准时间 世界时 ...
- 2018.09.25 bzoj3572: [Hnoi2014]世界树(虚树+树形dp)
传送门 虚树入门题? 好难啊. 在学习别人的写法之后终于过了. 这道题dp方程很好想. 主要是不好写. 简要说说思路吧. 显然最优值只能够从子树和父亲转移过来. 于是我们先dfs一遍用儿子更新父亲,然 ...
- 2018.07.17 HAOI2016 找相同字符(SAM)
传送门 就是给两个字符串,让你求公共字串的个数. 本来大佬们都是用的广义后缀自动机,但我感觉后缀自动机已经可以做这道题了.我们对其中一个字串建出后缀自动机,然后用另外一个后缀自动机在上面统计贡献即可. ...
- 判断PC机大小端
判断PC机大小端 #include<stdio.h> #include<stdlib.h> int main() { short a = 0x0102; char *p = ( ...
- qmake-how to
简单例子 假设已经实现如下程序: hello.cpphello.hmain.cpp 首先,使用编辑器,在上述文件目录下创建文件hello.pro.然后加入几行语句告诉qmake项目中的源文件和头文件. ...
- Blender3d做大型项目真实地形快速建模
https://www.rr-sc.com/thread-16531254-1-1.html Blender3d是一款优秀的动画和建模工具,但在做一些大型建设项目时需要在真实地形上来表现,Blende ...
- 如何实现让你的网站支持Google Roboto Font
最近在写一个移动端的web项目,designer设计的页面效果图就是使用Google Roboto Font.The Roboto Font 是Google为Android 4.0 Ice-Cream ...
- Oracle/PLSQL: BitAnd Function
BITAND 函数 本文介绍 Microsoft Excel 中 BITAND 函数的公式语法和用法. 说明 返回两个数的按位“与”. 语法 BITAND( number1, number2) BIT ...
- 一、配置etcd数据库
etcd服务作为Kubernetes集群的主数据库,在安装Kubernetes各服务之前需要首先安装和启动. 1. 安装etcd yum -y install etcd 2. 修改etcd配置文件 ...
- Tomcat跨域访问配置
下载cors-filter-1.7.jar,java-property-utils-1.9.jar这两个库文件,放到Tomcat的lib目录下. D:\Program Files\Tomcat-7.0 ...