认识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 - 模块 (持续更新)
随机推荐
- 前端之css笔记1
1 css引入方式 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- java,arduino,C#之间的一些编码转换
1.C#-> Encoding.UTF8.GetBytes( "abc中") ->[97,98,99,228,184,173] java->byte[] bs= ...
- HDU 2037 今年暑假不AC (区间贪心)
题意:又是中文题... 析:先说一下区间贪心的一个定理,选择不相交的区间:数轴上有n个开区间(ai, bi).选择尽量多的区间,使得这些区间两两不相交,贪心策略是,一定是选bi小的.(想一下为什么). ...
- kallinux2.0安装网易云音乐
安装 dpkg -i netease-cloud-music_1.0.0_amd64.kali2.0(yagami).deb apt-get -f install dpkg -i netease-cl ...
- 201709011工作日记--Volley源码详解(二)
1.Cache接口和DiskBasedCache实现类 首先,DiskBasedCache类是Cache接口的实现类,因此我们需要先把Cache接口中的方法搞明白. 首先分析下Cache接口中的东西, ...
- 制作一个导航卫星绕地球转动的3D Flash动画
为便于了解卫星发射以及绕地球运转的过程,制作此动画.
- 在 JNI 编程中避免内存泄漏与崩溃
JNI 编程简介 JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互——在 Java 程序中 ...
- 与数据库连接的页面增删改查 的easyui实现(主要是前端实现)
一.首先看一下最终实现的效果,上图 二.思路,主要是分两个文件实现,一个是页面显示文件:代码如下: <html> <head> <title>示例管理</ti ...
- Delphi for iOS开发指南(4):在iOS应用程序中使用不同风格的Button组件
http://blog.csdn.net/DelphiTeacher/article/details/8923481 在FireMonkey iOS应用程序中的按钮 FireMoneky定义了不同类型 ...
- 在MS单元测试中引发期望异常
首先准备一个引发异常的方法. public static void ThrowException() { throw new ArgumentException(); } 然后在单元测试项目中,写下测 ...