整理自菜鸟教程
AngularJS 通过新的属性和表达式扩展了 HTML。
AngularJS 可以构建一个单一页面应用程序(SPAs:Single Page Applications)。
AngularJS 学习起来非常简单。
名字 :
AngularJS 是比较新的技术,版本 1.0 是在 2012 年发布的。
AngularJS 是由 Google 的员工 Miško Hevery 从 2009 年开始着手开发。
这是一个非常好的构想,该项目目前已由 Google 正式支持,有一个全职的开发团队继续开发和维护这个库。
AngularJS 是一个 JavaScript 框架。它可通过
建议把脚本放在
元素的底部。
AngularJS 通过 ng-directives 扩展了 HTML。
ng-app 指令定义一个 AngularJS 应用程序。
ng-model 指令把元素值(比如输入域的值)绑定到应用程序。
ng-bind 指令把应用程序数据绑定到 HTML 视图。
名字 :
实例讲解:
当网页加载完毕,AngularJS 自动开启。
ng-app 指令告诉 AngularJS,
ng-model 指令把输入域的值绑定到应用程序变量 name。
ng-bind 指令把应用程序变量 name 绑定到某个段落的 innerHTML。
如果您移除了 ng-app 指令,HTML 将直接把表达式显示出来,不会去计算表达式的结果。
AngularJS 使得开发现代的单一页面应用程序(SPAs:Single Page Applications)变得更加容易。
正如您所看到的,AngularJS 指令是以 ng 作为前缀的 HTML 属性。
ng-init 指令初始化 AngularJS 应用程序变量。
姓名为
HTML5 允许扩展的(自制的)属性,以 data- 开头。
AngularJS 属性以 ng- 开头,但是您可以使用 data-ng- 来让网页对 HTML5 有效。
带有有效的 HTML5:
姓名为
AngularJS 表达式写在双大括号内:{{ expression }}。
AngularJS 表达式把数据绑定到 HTML,这与 ng-bind 指令有异曲同工之妙。
AngularJS 将在表达式书写的位置"输出"数据。
AngularJS 表达式 很像 JavaScript 表达式:它们可以包含文字、运算符和变量。
实例 {{ 5 + 5 }} 或 {{ firstName + " " + lastName }}
我的第一个表达式: {{ 5 + 5 }}
AngularJS 模块(Module) 定义了 AngularJS 应用。
AngularJS 控制器(Controller) 用于控制 AngularJS 应用。
ng-app指令指明了应用, ng-controller 指明了控制器。
尝试修改以下表单。
名:
姓:
姓名: {{firstName + " " + lastName}}
AngularJS 模块定义应用:
var app = angular.module('myApp', []);
AngularJS 控制器控制应用:
app.controller('myCtrl', function($scope) { $scope.firstName= "John"; $scope.lastName= "Doe"; });
在接下来的教程中你将学习到更多的应用和模块的知识。
step1:访问 Cloud Studio,注册/登录账户。
step2:在右侧的运行环境菜单选择:"ubuntu"
step3:在左侧代码目录中新建 html 目录,编写你的 HTML 代码,例如 index.html
step4:在 index.html 文件的中粘贴如下代码、来引入 AngularJS:
step5:在终端中输入命令sudo vim /etc/nginx/site-enable/default
。将配置文件红框部分修改为如下图所示,然后输入命令:sudo nginx restart
重启 nginx 服务( nginx 安装完成并启动后默认会监听80端口。我们需要将 nginx 的站点目录以及监听的端口号改为我们需要的)
step6:点击最右侧的【访问链接】选项卡,在访问链接面板中填写端口号为:8080(和刚才 nginx 配置文件中的端口号一致),点击创建链接,即可点击生成的链接访问我们刚刚编写的代码,查看 AngularJS 效果。
AngularJS 使用 表达式 把数据绑定到 HTML。
AngularJS 表达式写在双大括号内:{{ expression }}。
AngularJS 表达式把数据绑定到 HTML,这与 ng-bind 指令有异曲同工之妙。
AngularJS 将在表达式书写的位置"输出"数据。
AngularJS 表达式 很像 JavaScript 表达式:它们可以包含文字、运算符和变量。
实例 {{ 5 + 5 }} 或 {{ firstName + " " + lastName }}
我的第一个表达式: {{ 5 + 5 }}
AngularJS 数字就像 JavaScript 数字:
总价: {{ quantity * cost }}
div ng-app="" ng-init="quantity=1;cost=5">
总价: {{ quantity * cost }}
使用 ng-bind 的相同实例:
总价:
使用 ng-init 不是很常见。您将在控制器一章中学习到一个更好的初始化数据的方式。
AngularJS 字符串就像 JavaScript 字符串:
姓名: {{ firstName + " " + lastName }}
使用 ng-bind 的相同实例:
姓名:
AngularJS 对象就像 JavaScript 对象:
姓为 {{ person.lastName }}
使用 ng-bind 的相同实例:
姓为
AngularJS 数组就像 JavaScript 数组:
第三个值为 {{ points[2] }}
使用 ng-bind 的相同实例:
第三个值为
类似于 JavaScript 表达式,AngularJS 表达式可以包含字母,操作符,变量。
与 JavaScript 表达式不同,AngularJS 表达式可以写在 HTML 中。
与 JavaScript 表达式不同,AngularJS 表达式不支持条件判断,循环及异常。
与 JavaScript 表达式不同,AngularJS 表达式支持过滤器。
AngularJS 通过被称为 指令 的新属性来扩展 HTML。
AngularJS 通过内置的指令来为应用添加功能。
AngularJS 允许你自定义指令。
AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-。
ng-app 指令初始化一个 AngularJS 应用程序。
ng-init 指令初始化应用程序数据。
ng-model 指令把元素值(比如输入域的值)绑定到应用程序。
在输入框中尝试输入:
姓名:
你输入的为: {{ firstName }}
ng-app 指令告诉 AngularJS,
上面实例中的 {{ firstName }} 表达式是一个 AngularJS 数据绑定表达式。
AngularJS 中的数据绑定,同步了 AngularJS 表达式与 AngularJS 数据。
{{ firstName }} 是通过 ng-model="firstName" 进行同步。
在下一个实例中,两个文本域是通过两个 ng-model 指令同步的:
数量:
价格:
总价: {{quantity * price}}
重复 HTML 元素
ng-repeat 指令会重复一个 HTML 元素:
使用 ng-repeat 来循环数组
ng-repeat 指令用在一个对象数组上:
循环对象:
AngularJS 完美支持数据库的 CRUD(增加Create、读取Read、更新Update、删除Delete)应用程序。
把实例中的对象想象成数据库中的记录。
ng-app 指令定义了 AngularJS 应用程序的 根元素。
ng-app 指令在网页加载完毕时会自动引导(自动初始化)应用程序。
稍后您将学习到 ng-app 如何通过一个值(比如 ng-app="myModule")连接到代码模块。
ng-init 指令为 AngularJS 应用程序定义了 初始值。
通常情况下,不使用 ng-init。您将使用一个控制器或模块来代替它。
稍后您将学习更多有关控制器和模块的知识。
ng-model 指令 绑定 HTML 元素 到应用程序数据。
ng-model 指令也可以:
ng-repeat 指令对于集合中(数组中)的每个项会 克隆一次 HTML 元素。
除了 AngularJS 内置的指令外,我们还可以创建自定义指令。
你可以使用 .directive 函数来添加自定义的指令。
要调用自定义指令,HTML 元素上需要添加自定义指令名。
使用驼峰法来命名一个指令, runoobDirective, 但在使用它时需要以 - 分割, runoob-directive:
你可以通过以下方式来调用指令:
以下实例方式也能输出同样结果:
元素名
属性
类名
注意: 你必须设置 restrict 的值为 "C" 才能通过类名来调用指令。
注释
注意: 我们需要在该实例添加 replace 属性, 否则评论是不可见的。
注意: 你必须设置 restrict 的值为 "M" 才能通过注释来调用指令。
!-- directive: runoob-directive -->
你可以限制你的指令只能通过特定的方式来调用。
通过添加 restrict 属性,并设置值为 "A"
, 来设置指令只能通过属性的方式来调用:
注意: 通过设置 restrict 属性值为 "A" 来设置指令只能通过 HTML 元素的属性来调用。
restrict 值可以是以下几种:
E
作为元素名使用A
作为属性使用C
作为类名使用M
作为注释使用restrict 默认值为 EA
, 即可以通过元素名和属性名来调用指令。
ng-model 指令用于绑定应用程序数据到 HTML 控制器(input, select, textarea)的值。
ng-model
指令可以将输入域的值与 AngularJS 创建的变量绑定。
使用 ng-model 指令来绑定输入域的值到控制器的属性。
双向绑定,在修改输入域的值时, AngularJS 属性的值也将修改:
修改输入框的值,标题的名字也会相应修改。
在输入框中输入你的邮箱地址,如果不是一个合法的邮箱地址,会弹出提示信息。
以上实例中,提示信息会在 ng-show
属性返回 true
的情况下显示。
ng-model
指令可以为应用数据提供状态值(invalid, dirty, touched, error):
ng-model
指令基于它们的状态为 HTML 元素提供了 CSS 类:
编辑文本域,不同状态背景颜色会发生变化。
文本域添加了 required 属性,该值是必须的,如果为空则是不合法的。
ng-model
指令根据表单域的状态添加/移除以下类:
Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带。
Scope 是一个对象,有可用的方法和属性。
Scope 可应用在视图和控制器上。
当你在 AngularJS 创建控制器时,你可以将 $scope 对象当作一个参数传递:
控制器中的属性对应了视图上的属性:
控制器中创建一个属性名 "carname",对应了视图中使用 {{ }} 中的名称。
当在控制器中添加 $scope 对象时,视图 (HTML) 可以获取了这些属性。
视图中,你不需要添加 $scope 前缀, 只需要添加属性名即可,如: {{carname}}。
AngularJS 应用组成如下:
scope 是模型。
scope 是一个 JavaScript 对象,带有属性和方法,这些属性和方法可以在视图和控制器中使用。
如果你修改了视图,模型和控制器也会相应更新:
当你修改输入框中的值时,会影响到模型(model),当然也会影响到控制器对应的属性值。
了解你当前使用的 scope 是非常重要的。
在以上两个实例中,只有一个作用域 scope,所以处理起来比较简单,但在大型项目中, HTML DOM 中有多个作用域,这时你就需要知道你使用的 scope 对应的作用域是哪一个。
当我们使用 ng-repeat 指令时,每个重复项都访问了当前的重复对象:
每个 元素可以访问当前的重复对象,这里对应的是一个字符串, 并使用变量 x 表示。
所有的应用都有一个 $rootScope,它可以作用在 ng-app 指令包含的所有 HTML 元素中。
$rootScope 可作用于整个应用中。是各个 controller 中 scope 的桥梁。用 rootscope 定义的值,可以在各个 controller 中使用。
创建控制器时,将 $rootScope 作为参数传递,可在应用中使用:
注意 $rootScope 在循环对象内外都可以访问。
AngularJS 控制器 控制 AngularJS 应用程序的数据。
AngularJS 控制器是常规的 JavaScript 对象。
AngularJS 应用程序被控制器控制。
ng-controller 指令定义了应用程序控制器。
控制器是 JavaScript 对象,由标准的 JavaScript 对象的构造函数 创建。
名:
姓:
姓名: {{firstName + " " + lastName}}
应用解析:
AngularJS 应用程序由 ng-app 定义。应用程序在
ng-controller="myCtrl" 属性是一个 AngularJS 指令。用于定义一个控制器。
myCtrl 函数是一个 JavaScript 函数。
AngularJS 使用$scope 对象来调用控制器。
在 AngularJS 中, $scope 是一个应用对象(属于应用变量和函数)。
控制器的 $scope (相当于作用域、控制范围)用来保存AngularJS Model(模型)的对象。
控制器在作用域中创建了两个属性 (firstName 和 lastName)。
ng-model 指令绑定输入域到控制器的属性(firstName 和 lastName)。
上面的实例演示了一个带有 lastName 和 firstName 这两个属性的控制器对象。
控制器也可以有方法(变量和函数):
名:
姓:
姓名: {{fullName()}}
在大型的应用程序中,通常是把控制器存储在外部文件中。
只需要把
名:
姓:
姓名: {{firstName + " " + lastName}}