学习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. 20155328 2016-2017-2 《Java程序设计》第7周学习总结

    20155328 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 时区 Date与DateFormat Date只用来获取epoch毫秒数 DateForma ...

  2. 2018.09.01 hdu4405 Aeroplane chess (期望dp)

    传送门 期望dp简单题啊. 不过感觉题意不太对. 手过了一遍样例发现如果有捷径必须走. 这样的话就简单了啊. 设f[i]" role="presentation" sty ...

  3. string的常用操作

    操作符 1.+:可以把两个字符串加起来 插入 iterator insert(iterator i, const char &ch); basic_string &insert(siz ...

  4. nexus 参考文档

    参考文档: http://books.sonatype.com/nexus-book/reference/index.html E:\e\nexus\nexus-2.12.0-01\conf\nexu ...

  5. (网络流 模板 Edmonds-Karp)Drainage Ditches --POJ --1273

    链接: http://poj.org/problem?id=1273 Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total ...

  6. Hibernate和spring中的session总结

    1.this.getSession() 是org.springframework.orm.hibernate3.support.HibernateDaoSupport 中的一个方法,它可以从当前事务或 ...

  7. 【WinRT】多语言化应用程序名称

    在Windows Phone 8的时候,要对应用程序在列表中显示的名称和锁定到开始屏幕的磁贴的名称进行多语言化是十分困难的,需要使用C++建立一个多语言资源库.但是,在WinRT中,这变得简单多了,无 ...

  8. WinRT 中检查 WiFi 是否可用

    public static bool IsWifiConnected() { bool isWifiConnected = false; ConnectionProfile currentConnec ...

  9. Git安全配置

      今天收到了阿里云异地登录的短信报警,登录阿里云后台发现,有人从深圳登录了我的服务器(本人在北京),查看详细信息一共登录了5次,前两次是使用的git用户进行登录,后两次已经变成了root用户,怀疑是 ...

  10. flume 整合kafka

    背景:系统的数据量越来越大,日志不能再简单的文件的保存,如此日志将会越来越大,也不方便查找与分析,综合考虑下使用了flume来收集日志,收集日志后向kafka传递消息,下面给出具体的配置 # The ...