学习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

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <script src="/Scripts/angular.js"></script>
  5. </head>
  6. <body>
  7. </body>
  8. </html>

2. 新建javascript脚本,在里面创建Module:student, 定义一个学生jack,在Module:student上创建Controller:myController

  1. <script type="text/javascript">
  2. (function () {
  3. var app = angular.module('student', []);
  4.  
  5. var jack = {
  6. name: "Jack",
  7. age: 18,
  8. sex: 'male',
  9. displayComment: false
  10. };
  11.  
  12. // 在Module:student上创建Controller:myController
  13. app.controller('myController', function () {
  14. this.student = jack;
  15. });
  16. })();
  17. </script>

3. 完整的body部分的代码

  1. <!--指定body为Module:student的作用域,ng-app为AngularJS内建的Directive-->
  2. <body ng-app="student">
  3. <!--指定该div为myController的作用域,为了便于使用,指定myController的别名为myCtrl-->
  4. <!--ng-controller为AngularJS内建的Directive-->
  5. <div ng-controller="myController as myCtrl">
  6. <!--显示myCtrl中对象student的name属性-->
  7. <p>Name:{{myCtrl.student.name}}</p>
  8. <!--显示myCtrl中对象student的age属性,使用Expression计算15年以后该学生的年龄-->
  9. <p>Age:{{myCtrl.student.age}} will be {{myCtrl.student.age+15}} after 15 years.</p>
  10. <p>Sex:{{myCtrl.student.sex}}</p>
  11. <!--ng-show为AngularJS内建的Directive,用来控制作用标签是否显示在页面上,由于jack的displayComment=false,因此Comments的内容将不会显示在页面上-->
  12. <p ng-show="myCtrol.student.displayComment">Comments:This will not display on page.</p>
  13. </div>
  14. <!-- 这里已经不再myController的作用范围内,Expression不会被AngularJS解析 -->
  15. Name:{{myCtrl.student.name}}
  16. </body>

AngularJS默认只加载第一个Module,如需加载多个Module,需使用angular.bootstrap手动加载,特别注意的是,Module之间是不允许嵌套使用的。由于AngularJS是基于SPA(Single Page Application)原则设计的,因此我想应该遵循此原则,用别的方式避免一个页面使用多个Modules的情况。

4. 以下是单页面使用多个Module的完整代码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <script src="/Scripts/angular.js"></script>
  5. <script type="text/javascript">
  6. (function () {
  7. var app1 = angular.module('student1', []);
  8.  
  9. var jack1 = {
  10. name: "Jack1",
  11. age: 18,
  12. sex: 'male',
  13. displayComment: false
  14. };
  15.  
  16. app1.controller('myController1', function () {
  17. this.student = jack1;
  18. });
  19.  
  20. var app2 = angular.module('student2', []);
  21.  
  22. var jack2 = {
  23. name: "Jack2",
  24. age: 28,
  25. sex: 'female',
  26. displayComment: true
  27. };
  28.  
  29. app2.controller('myController2', function () {
  30. this.student = jack2;
  31. });
  32.  
  33. angular.element(document).ready(function () {
  34. var myDiv1 = document.getElementById("myDiv1");
  35. angular.bootstrap(myDiv1, ["student1", "student2"]);
  36.  
  37. var myDiv2 = document.getElementById("myDiv2");
  38. angular.bootstrap(myDiv2, ["student2"]);
  39. });
  40. })();
  41. </script>
  42. </head>
  43. <body>
  44. <div id="myDiv1">
  45. <div ng-controller="myController1 as myCtrl">
  46. <p>Student1:</p>
  47. <p>Name:{{myCtrl.student.name}}</p>
  48. <p>Age:{{myCtrl.student.age}} will be {{myCtrl.student.age+15}} after 15 years.</p>
  49. <p>Sex:{{myCtrl.student.sex}}</p>
  50. <p ng-show="myCtrol.student.displayComment">Comments:This will not display on page.</p>
  51. </div>
  52. <br />
  53. <br />
  54. <div ng-controller="myController2 as myCtrl2">
  55. <p>Student2:</p>
  56. <p>Name:{{myCtrl2.student.name}}</p>
  57. <p>Age:{{myCtrl2.student.age}} will be {{myCtrl2.student.age+15}} after 15 years.</p>
  58. <p>Sex:{{myCtrl2.student.sex}}</p>
  59. <p ng-show="myCtrl2.student.displayComment">Comments:This will not display on page.</p>
  60. </div>
  61. </div>
  62. <br />
  63. <br />
  64. <div id="myDiv2">
  65. <div ng-controller="myController2 as myCtrl2">
  66. <p>Student2:</p>
  67. <p>Name:{{myCtrl2.student.name}}</p>
  68. <p>Age:{{myCtrl2.student.age}} will be {{myCtrl2.student.age+15}} after 15 years.</p>
  69. <p>Sex:{{myCtrl2.student.sex}}</p>
  70. <p ng-show="myCtrl2.student.displayComment">Comments:This will not display on page.</p>
  71. </div>
  72. </div>
  73. </body>
  74. </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. Java代码实现依赖注入

    http://zhangjunhd.blog.51cto.com/113473/126545 这里将模仿Spring实现一种基于xml配置文件的依赖注入机制.文件中将实现3中注入,一是单值注入,包括i ...

  2. HDFS系列 -- HDFS预研

    1 HDFS概述 由于传统集中式的物理服务器在存储容量和数据传输速度等方面都有限制,故而越来越不符合这些数据的实际存储需要. 在大数据时代,大数据处理需要解决的首要问题是:如何高效地存储所产生的规模庞 ...

  3. ThinkPHP5命令行 执行控制器下的某方法

    入口文件后加一个空格就行了 1,首先cd到站点目录public下,我的入口文件是默认的index.php,然后执行以下命令,, 2,php要加入环境变量,index.php后面加空格,然后是模块,控制 ...

  4. An existing resource has been found at location D:\Tomcat 7\apache-tomcat-7.0.55\webapps。。。

    这个错误是说你的资源丢失,就是说tomcat无法解析你的.class文件,需要自己重新配置一下. 解决方法: 右击项目名 ---> 点击properties --> 在搜索栏里 输入 WE ...

  5. 继承方法-->call继承

    function Person(name,age,sex){ this.name = name; this.age = age; this.sex = sex; }function P1(name,a ...

  6. AngularJS标准Web业务流程开发框架—1.AngularJS模块以及启动分析

    前言: AngularJS中提到模块是自定义的模块标准,提到这不得不说AngularJS是框架中的老大哥,思想相当的前卫..在这框架满天横行的时代,AngularJS有些思想至今未被超越,当然仁者见仁 ...

  7. MATLAB实现最优低通滤波器的函数

    MATLAB实现最优低通滤波器的函数 % Fs     --Data rate % Fpass  --pass band % Fstop  --Cutoff frequencies % Apass  ...

  8. SSD测试第一神器——FIO

    原文 地址 http://www.ssdfans.com/ssd%E6%B5%8B%E8%AF%95%E7%AC%AC%E4%B8%80%E7%A5%9E%E5%99%A8-fio-2/ 对于SSD性 ...

  9. Linux C++ - IP地址转换函数

    1. 函数用途:数字网络序本地序转换 适用类型:IP地址uint32_t类型.端口号uint16_t类型 #include<netinet/in.h> extern uint32_t nt ...

  10. Alwayson--工作流程

    Alwayson的工作流程: 1. 在主副本上,用户提交数据修改事务,等待服务器返回成功表示: 2. 在主副本上,将事务日志固化(harden),SQL SERVER调用Logwriter线程将事务日 ...