学习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的更多相关文章

  1. 通过AngularJS实现前端与后台的数据对接(二)——服务(service,$http)篇

    什么是服务? 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性. 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化) ...

  2. AngularJs之九(ending......)

    今天继续angularJs,但也是最后一篇关于它的了,基础部分差不多也就这些,后续有机会再写它的提升部分. 今天要写的也是一个基础的选择列表: 一:使用ng-options,数组进行循环. <d ...

  3. AngularJS过滤器filter-保留小数,小数点-$filter

    AngularJS      保留小数 默认是保留3位 固定的套路是 {{deom | number:4}} 意思就是保留小数点 的后四位 在渲染页面的时候 加入这儿个代码 用来精确浮点数,指定小数点 ...

  4. Angular企业级开发(1)-AngularJS简介

    AngularJS介绍 AngularJS是一个功能完善的JavaScript前端框架,同时是基于MVC(Model-View-Controller理念的框架,使用它能够高效的开发桌面web app和 ...

  5. 模拟AngularJS之依赖注入

    一.概述 AngularJS有一经典之处就是依赖注入,对于什么是依赖注入,熟悉spring的同学应该都非常了解了,但,对于前端而言,还是比较新颖的. 依赖注入,简而言之,就是解除硬编码,达到解偶的目的 ...

  6. 步入angularjs directive(指令)--点击按钮加入loading状态

    今天我终于鼓起勇气写自己的博客了,激动与害怕并存,希望大家能多多批评指导,如果能够帮助大家,也希望大家点个赞!! 用angularjs 工作也有段时间了,总体感觉最有挑战性的还是指令,因为没有指令的a ...

  7. 玩转spring boot——结合AngularJs和JDBC

    参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...

  8. 玩转spring boot——结合jQuery和AngularJs

    在上篇的基础上 准备工作: 修改pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

  9. 通过AngularJS实现前端与后台的数据对接(一)——预备工作篇

    最近,笔者在做一个项目:使用AngularJS,从而实现前端与后台的数据对接.笔者这是第一次做前端与后台的数据对接的工作,因此遇到了许多问题.笔者在这些问题中,总结了一些如何实现前端与后台的数据对接的 ...

  10. AngularJS 系列 学习笔记 目录篇

    目录: AngularJS 系列 01 - HelloWorld和数据绑定 AngularJS 系列 02 - 模块 (持续更新)

随机推荐

  1. Django入门与实践-第19章:主题回复(完结)

    http://127.0.0.1:8000/boards/1/topics/1/reply/ http://127.0.0.1:8000/boards/1/topics/1/ #myproject/u ...

  2. IP之NCO仿真

    NCO仿真要用.vo仿真模型,不能用.v文件 /**************************************************************************** ...

  3. 使用原生Java Web来实现大文件的上传

    版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...

  4. 数据分析工具R和RStudio入门介绍

    https://www.cnblogs.com/yjd_hycf_space/p/6672995.html Python&R语言-python和r相遇:https://www.cnblogs. ...

  5. 反编译 轻松调频 Android APP 下载“飞鱼秀”录音

    经常听“飞鱼秀”,但是由于时间的原因,只能听回放,但是轻松调频的APP做的有点儿... 听回放的时候经常会中断,还不能拖动进度条,就决定把录音下载下来听. 1.反编译apk(Android反编译过程见 ...

  6. (二叉树)Elven Postman -- HDU -- 54444(2015 ACM/ICPC Asia Regional Changchun Online)

    http://acm.hdu.edu.cn/showproblem.php?pid=5444 Elven Postman Time Limit: 1500/1000 MS (Java/Others)  ...

  7. 20155323 2016-2017-2 《Java程序设计》第6周学习总结

    20155323 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 串流:衔接数据的来源和目的地就是串流对象. I/O操作主要是指使用Java进行输入,输出操作 ...

  8. _variant_t与其他数据类型的转换

    转自:http://kuaixingdong.blog.hexun.com/29627840_d.html 我们先看看COM所支持的一些类型的基本类: (微软提供,在comdef.h中定义) 在COM ...

  9. hdu2844

    题目 这道题,刚开始题没读懂,就是这句话:,A1,A2,A3...An and C1,C2,C3...Cn corresponding to the number of Tony's coins of ...

  10. Vuejs——(5)v-on

    版权声明:出处http://blog.csdn.net/qq20004604   目录(?)[+]   资料来于官方文档: http://cn.vuejs.org/guide/events.html ...