AngularJS 简介
指令
- ng-app 指令告诉 AngularJS,元素是 AngularJS 应用程序 的”所有者”
- ng-model 指令把输入域的值绑定到应用程序变量 name
|
|
- ng-bind 指令把应用程序变量 name 绑定到某个段落的 innerHTML
- ng-init 指令初始化 AngularJS 应用程序变量
|
|
表达式
- AngularJS 表达式写在双大括号内:
应用
- ng-app指令定义了应用
- ng-controller 定义了控制器
|
|
AngularJS 表达式
- AngularJS 表达式写在双大括号内:
|
|
AngularJS 数字
- AngularJS 数字就像 JavaScript 数字
|
|
- 使用 ng-bind 的相同实例
|
|
AngularJS 表达式
- AngularJS 表达式写在双大括号内:
|
|
AngularJS 数字
- AngularJS 数字就像 JavaScript 数字
|
|
- 使用 ng-bind 的相同实例
|
|
AngularJS 字符串
- AngularJS 字符串就像 JavaScript 字符串
|
|
- 使用 ng-bind 的相同实例
|
|
AngularJS 对象
- AngularJS 对象就像 JavaScript 对象
|
|
- 使用 ng-bind 的相同实例
|
|
AngularJS 数组
- AngularJS 数组就像 JavaScript 数组
|
|
- 使用 ng-bind 的相同实例
|
|
AngularJS 表达式 与 JavaScript 表达式
- 类似于 JavaScript 表达式,AngularJS 表达式可以包含字母,操作符,变量。
- 与 JavaScript 表达式不同,AngularJS 表达式可以写在 HTML 中。
- 与 JavaScript 表达式不同,AngularJS 表达式不支持条件判断,循环及异常。
- 与 JavaScript 表达式不同,AngularJS 表达式支持过滤器
ngularJS 指令
- ng-app 指令初始化一个 AngularJS 应用程序。
- ng-init 指令初始化应用程序数据。
- ng-model 指令把元素值(比如输入域的值)绑定到应用程序
|
|
数据绑定
- 表达式是一个 AngularJS 数据绑定表达
|
|
重复 HTML 元素
- ng-repeat 指令会重复一个 HTML 元素
|
|
- ng-repeat 指令用在一个对象数组上
|
|
ng-app 指令
- ng-app 指令在网页加载完毕时会自动引导(自动初始化)应用程序
ng-init 指令
- ng-init 指令为 AngularJS 应用程序定义了 初始值
ng-model 指令
- ng-model 指令 绑定 HTML 元素 到应用程序数据
ng-repeat 指令
- ng-repeat 指令对于集合中(数组中)的每个项会 克隆一次 HTML 元素
创建自定义的指令
- .directive 函数来添加自定义的指令
- 要调用自定义指令,HTML 元素上需要添加自定义指令名
|
|
限制使用
- 通过添加 restrict 属性,restrict 默认值为 EA, 即可以通过元素名和属性名来调用指令
- E 作为元素名使用
- A 作为属性使用
- C 作为类名使用
- M 作为注释使用
|
|
AngularJS模型
- ng-model 指令用于绑定应用程序数据到 HTML 控制器(input, select, textarea)的值
ng-model 指令
- ng-model 指令可以将输入域的值与 AngularJS 创建的变量绑定
|
|
双向绑定
- 双向绑定,在修改输入域的值时, AngularJS 属性的值也将修改
|
|
验证用户输入
|
|
应用状态
- ng-model 指令可以为应用数据提供状态值(invalid, dirty, touched, error)
|
|
CSS 类
- ng-model 指令基于它们的状态为 HTML 元素提供了 CSS 类
|
|
AngularJS Scope
- Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带
|
|
Scope 概述
- View(视图), 即 HTML。
- Model(模型), 当前视图中可用的数据。
- Controller(控制器), 即 JavaScript 函数,可以添加或修改属性
|
|
Scope 作用范围
- 在以上两个实例中,只有一个作用域 scope,所以处理起来比较简单
|
|
根作用域
- $rootScope 可作用于整个应用中。是各个 controller 中 scope 的桥梁。用 rootscope 定义的值,可以在各个 controller 中使用
|
|
AngularJS 过滤器
- 过滤器可以使用一个管道字符(|)添加到表达式和指令中
AngularJS 过滤器
- AngularJS 过滤器可用于转换数据
- currency 格式化数字为货币格式
- filter 从数组项中选择一个子集
- lowercase 格式化字符串为小写
- orderBy 根据某个表达式排列数组
- uppercase 格式化字符串为大写
表达式中添加过滤器
- 过滤器可以通过一个管道字符(|)和一个过滤器添加到表达式中
|
|
currency 过滤器
- currency 过滤器将数字格式化为货币格式
|
|
向指令添加过滤器
- orderBy 过滤器根据表达式排列数组
|
|
过滤输入
- filter 过滤器从数组中选择一个子集
|
|
自定义过滤器
- 以下实例自定义一个过滤器 reverse,将字符串反转
|
|
AngularJS 服务(Service)
- AngularJS 中你可以创建自己的服务,或使用内建服务
服务
- 在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用
- $location 服务,它可以返回当前页面的 URL 地址
|
|
使用服务
- AngularJS 会一直监控应用,处理事件变化, AngularJS 使用 $location 服务比使用 window.location 对象更好
$http 服务
- $http 是 AngularJS 应用中最常用的服务,服务向服务器发送请求,应用响应服务器传送过来的数据
|
|
$timeout 服务
- AngularJS $timeout 服务对应了 JS window.setTimeout 函数
|
|
$interval 服务
- AngularJS $interval 服务对应了 JS window.setInterval 函数
|
|
创建自定义服务
- 创建访问自定义服务,链接到你的模块中
|
|
- 要使用访问自定义服务,需要在定义控制器的时候独立添加,设置依赖关系
|
|
过滤器中,使用自定义服务
- 当你创建了自定义服务,并连接到你的应用上后,你可以在控制器,指令,过滤器或其他服务中使用它
|
|
- 在对象数组中获取值时你可以使用过滤器
|
|
AngularJS Select(选择框)
- AngularJS 可以使用数组或对象创建一个下拉列表选项
使用 ng-options 创建选择框
- 在 AngularJS 中我们可以使用 ng-option 指令来创建一个下拉列表,列表项通过对象和数组循环输出
|
|
ng-options 与 ng-repeat
- 可以使用ng-repeat 指令来创建下拉列表
|
|
- 使用 ng-options 指令,选择的值是一个对象
|
|
数据源为对象
- 前面实例我们使用了数组作为数据源,以下我们将数据对象作为数据源
|
|
- value 在 key-value 对中也可以是个对象
|
|
- 在下拉菜单也可以不使用 key-value 对中的 key , 直接使用对象的属性
|
|
AngularJS 表格
- ng-repeat 指令可以完美的显示表格
|
|
废弃声明 (v1.5)
- v1.5 中$http 的 success 和 error 方法已废弃。使用 then 方法替代
|
|
使用 orderBy 过滤器
- 排序显示,可以使用 orderBy 过滤器
|
|
显示序号 ($index)
- 表格显示序号可以在
中添加 $index
|
|
使用 $even 和 $odd
|
|
AngularJS SQL
- 在前面章节中的代码也可以用于读取数据库中的数据
使用 PHP 从 MySQL 中获取数据
|
|
ASP.NET 中执行 SQL 获取数据
|
|
服务端代码
- 使用 PHP 和 MySQL。返回 JSON。
- 使用 PHP 和 MS Access。返回 JSON。
- 使用 ASP.NET, VB, 及 MS Access。 返回 JSON。
- 使用 ASP.NET, Razor, 及 SQL Lite。 返回 JSON
跨域 HTTP 请求
- header(“Access-Control-Allow-Origin: *”);
PHP 和 MySql 代码实例
|
|
PHP 和 MS Access 代码实例
|
|
ASP.NET, VB 和 MS Access 代码实例
|
|
ASP.NET, VB Razor 和 SQL Lite 代码实例
|
|
AngularJS HTML DOM
- AngularJS 为 HTML DOM 元素的属性提供了绑定应用数据的指令
ng-disabled 指令
- ng-disabled 指令直接绑定应用程序数据到 HTML 的 disabled 属性
|
|
ng-show 指令
- ng-show 指令隐藏或显示一个 HTML 元素
|
|
ng-hide 指令
- ng-hide 指令用于隐藏或显示 HTML 元素
|
|
AngularJS 事件
- AngularJS 有自己的 HTML 事件指令
ng-click 指令
- ng-click 指令定义了 AngularJS 点击事件
|
|
隐藏 HTML 元素
- ng-hide 指令用于设置应用部分是否可见
- ng-hide=”true” 设置 HTML 元素不可见
- ng-hide=”false” 设置 HTML 元素可见
|
|
显示 HTML 元素
- ng-show 指令可用于设置应用中的一部分是否可见
- ng-show=”false” 可以设置 HTML 元素 不可见
- ng-show=”true” 可以以设置 HTML 元素可见
|
|
AngularJS 模块
- 模块定义了一个应用程序
|
|
添加控制器
- 使用 ng-controller 指令来添加应用的控制器
|
|
添加指令
- AngularJS 提供了很多内置的指令,你可以使用它们来为你的应用添加功能
|
|
模块和控制器包含在 JS 文件中
- 通常 AngularJS 应用程序将模块和控制器包含在 JavaScript 文件中
|
|
函数会影响到全局命名空间
- AngularJS 模块让所有函数的作用域在该模块下,避免了该问题
什么时候载入库
- AngularJS 在 元素中被加载,因为对 angular.module 的调用只能在库加载完成后才能进行
- AngularJS 库是在文档的 区域被加载
|
|
AngularJS 表单
- AngularJS 表单是输入控件的集合
HTML 控件
- input 元素
- select 元素
- button 元素
- textarea 元素
数据绑定
- Input 控件使用 ng-model 指令来实现数据绑定
|
|
Checkbox(复选框)
- checkbox 的值为 true 或 false,可以使用 ng-model 指令绑定
|
|
单选框
- 单选框使用同一个 ng-model ,可以有不同的值,但只有被选中的单选按钮的值会被使用
|
|
下拉菜单
- ng-model 属性的值为你在下拉菜单选中的选项
|
|
AngularJS 表单实例
|
|
AngularJS 输入验证
- AngularJS 表单和控件可以验证输入的数据
输入验证
- AngularJS 表单和控件可以提供验证功能,并对用户输入的非法数据进行警告
|
|
AngularJS API
- API 意为 Application Programming Interface(应用程序编程接口)
AngularJS 全局 API
- AngularJS 全局 API 用于执行常见任务的 JavaScript 函数集合
- 比较对象
- 迭代对象
- 转换对象
angular.lowercase()
- 转换字符串为小写
|
|
angular.uppercase()
- 转换字符串为大写
|
|
angular.isString()
- 判断给定的对象是否为字符串,如果是返回 true
|
|
angular.isNumber()
- 判断给定的对象是否为数字,如果是返回 true
|
|
AngularJS Bootstrap
- AngularJS 的首选样式表是 Twitter Bootstrap, Twitter Bootstrap 是目前最受欢迎的前端框架
Bootstrap
- 元素中添加如下代码
|
|
HTML 代码
|
|
AngularJS Bootstrap
- AngularJS 的首选样式表是 Twitter Bootstrap, Twitter Bootstrap 是目前最受欢迎的前端框架
Bootstrap
- 元素中添加如下代码
|
|
HTML 代码
|
|
JavaScript 代码
|
|
AngularJS 包含
- 在 AngularJS 中,你可以在 HTML 中包含 HTML 文件
在 HTML 中包含 HTML 文件
- 在 HTML 中,目前还不支持包含 HTML 文件的功能
服务端包含
- 大多服务端脚本都支持包含文件功能 (SSI: Server Side Includes)
- 使用 SSI, 你可在 HTML 中包含 HTML 文件,并发送到客户端浏览器
|
|
客户端包含
- 通常我们使用 http 请求 (AJAX) 从服务端获取数据,返回的数据我们可以通过 使用 innerHTML 写入到 HTML 元素中
AngularJS 包含
- 使用 AngularJS, 你可以使用 ng-include 指令来包含 HTML 内容
|
|
- runoob.htm 文件代码
|
|
包含 AngularJS 代码
- ng-include 指令除了可以包含 HTML 文件外,还可以包含 AngularJS 代码
|
|
- sites.htm 文件代码
|
|
跨域包含
- 默认情况下, ng-include 指令不允许包含其他域名的文件
|
|
- 还需要设置服务端允许跨域访问
|
|
AngularJS 动画
- AngularJS 提供了动画效果,可以配合 CSS 使用
- AngularJS 使用动画需要引入 angular-animate.min.js 库
|
|
- 还需在应用中使用模型 ngAnimate
|
|
- 动画是通过改变 HTML 元素产生的动态变化效果
|
|
- 如果我们应用已经设置了应用名,可以把 ngAnimate 直接添加在模型中
|
|
ngAnimate 做了什么
- ngAnimate 模型可以添加或移除 class
- ngAnimate 模型并不能使 HTML 元素产生动画,但是 ngAnimate 会监测事件,类似隐藏显示 HTML 元素 ,如果事件发生 ngAnimate 就会使用预定义的 class 来设置 HTML 元素的动画
- AngularJS 添加/移除 class 的指令
- ng-show
- ng-hide
- ng-class
- ng-view
- ng-include
- ng-repeat
- ng-if
- ng-switch
使用 CSS 动画
- CSS transition(过渡) 或 CSS 动画让 HTML 元素产生动画效果
CSS 过渡
- CSS 过渡可以让我们平滑的将一个 CSS 属性值修改为另外一个
|
|
CSS 动画
- CSS 动画允许你平滑的修改 CSS 属性值
|
|
AngularJS 依赖注入
什么是依赖注入
- 依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或者通过引用传递)到一个独立的对象(或客户端)中,然后成为了该客户端状态的一部分
AngularJS 提供很好的依赖注入机制。以下5个核心组件用来作为依赖注入
- value
- factory
- service
- provider
- constant
value
- Value 是一个简单的 javascript 对象,用于向控制器传递值(配置阶段)
|
|
factory
- factory 是一个函数用于返回值。在 service 和 controller 需要时创建
- 通常我们使用 factory 函数来计算或返回值
|
|
provider
- AngularJS 中通过 provider 创建一个 service、factory等(配置阶段)
- rovider 中提供了一个 factory 方法 get(),它用于返回 value/service/factory
|
|
constant
- constant(常量)用来在配置阶段传递数值,注意这个常量在配置阶段是不可用的
|
|
实例
- AngularJS 实例 - factory
|
|
- AngularJS 实例 - provider
|
|
AngularJS 路由
- AngularJS 路由允许我们通过不同的 URL 访问不同的内容
- 通过 AngularJS 可以实现多视图的单页Web应用(single page web application,SPA)
- 通常我们的URL形式为 http://runoob.com/first/page,但在单页Web应用中 AngularJS 通过 # + 标记 实现
|
|
实例
- 在以上图形中,我们可以看到创建了两个 URL: /ShowOrders 和 /AddNewOrder。每个 URL 都有对应的视图和控制器
|
|