angular知识点总结

angularjs

angular支持的运算

逻辑运算

比较运算

三目运算

调用字符串对象的成员方法

使用直接变量表示法创建对象

使用数组

(不可以)new var

(不可以)调用全局es

javascript对象中的分类

1)ECMAScript标准对象 Global String Data RegExp Array Object

可以在任何一个js解析器中使用

2)宿主对象

DOM: node element attribute

bom: window document

只能在浏览器中的js解释器中使用 不能在独立的服务器端js解释器(如NodeJS)中使用

3)用户自定义对象

angular指令

ng-app

ng-init

ng-bind

ng-controller

ng-repeat

ng-if

angular声明Model数据

1)使用Controller对象创建Model数据

ngApp -> Module -> Controller ->Model

1)声明ngApp

2)创建自定义模块 angular.module(‘myModule’,[ng]);

3)在应用中注册自定义模块: ng-app=”模块名”

4)在模块中声明controller

5)在view中指定controller对象的作用范围

6)在controller中声明model

Angular四大特征

1)MVC模型

Model 模型业务数据 (商品,订单 核心数据 从数据库来)

(前端应用中就是保存在JS变量,保存在特定范围内的模型变量)

View 视图 业务数据的呈现(前端应用中HTML)

Controller 控制器业务数据的获取删除修改(前端应用中function)

model:业务数据($scope,$rootScope.xx)

view:业务数据呈现 html+ngXXX

control:操作业务数据 .controller(“”,function(){})

2)双向数据绑定

方向1:Model绑定到View 只要Model变View随着变

方向2:View(表单控件)绑定到Model 只要View变 Model随着变

(最大的缺陷是)原生js dom只有特定事件的监听机制 没有监听数据/对象/值改变的机制

3)依赖注入

如何解决依赖关系:

1.主动创建方式

var c1 = new Car(); //主动创建依赖对象

var d1 = new Driver(c1); //传递依赖对象

2.被动注入(Injection)方式

module.controller(‘控制器’,function($scope,$interval){})

angular中的ngController指令在实例化控制器对象时 会根据指定的形参名

创建出控制器所依赖的对象 并注入给控制器对象-依赖注入现象

(如果使用yui压缩 会导致形参传递失败)

(解决:

....controller(‘myCtrl’,[‘$interval’,’$scope’,’$timeout’,function($interval,$scope,$timeout){

}])

可以被注入的对象:

1.$rootScope

2.$interval

3.$timeout

4.$log

5.$http

6.$location

)

4)模块化(Module)设计-体现 “高聚合低耦合”

Angular与jQuery关系

jquery操作思路:先找元素 再操作元素 $(…)

AngularJS操作思路:创建业务数据 绑定数据 维护数据

Angular已经把dom操作封装了

angular在加载时

判断 是否有jquery.js 如果存在用当前jq操作dom

不存在 会使用自定义的精简版本jqLite-只有核心jQuery方法

MVC模型

1)在一个Angular应用中可以声明多个模块

2)某个模块可以依赖于其他模块

3)有一个模块必须注册给ngApp指令 - 启动模块

4)一个模块中可以声明多种组件

1.controller

2.directive

3.service

4.filter

5.....

5)$scope表示当前控制器对象的有效范围/作用域

声明在某个$scope中的模型数据 一般情况下不能被其他控制器使用

想在多个控制器间共享/传递数据 可以在根作用域中–$rootScope每个Angular应用(ngApp)只有一个

唯一的$rootScope对象

控制器的本质用途 用于划分一个大型页面中的不同的div块 每个这样的块中都有自己专用的数据 以及可以

和其他块共享的数据

双向数据绑定

1)方向1:Model绑定到View 此后不论何时只要Model发生变化 View会同时更新

实现方法:{{}} ngBind ngIf ngRepeat ngShow ngChecked 等等几乎所有的现实数据指令都实现了

方向1的绑定

2)方向2:View绑定到Model 把视图中用户可以修改的HTML元素-即表单控件的值

绑定到一个Model变量上 此后 不论何时只要用户修改了表单控件的值

后台模型变量的值就会随之改变

实现方法:ngModel

为了监视Model变量是否真的改变 可以使用$scope.$watch()函数对Model数据进行监视

-单行文本输入域 ngModel可以把value属性绑定到Model变量

-复选框 ngModel可以把true/false 值绑定到Model变量

-单选框 ngModel可以把当前选中的单选框的value值绑定到Model变量

-下拉框 ngModel可以把当前选中的option的value值绑定到Model变量

4.ng模块提供的service组件

1.$rootScope 用于在所有的控件器间共享数据

2.$interval 周期性定时器服务

3.$timeout 一次性定时器服务

4.$log 提供5个基本的日志输出服务

5.$http 提供异步Http请求(AJAX服务)

$http.get() $http.post() $http.put() $http.delete()

resful

用法:$http({method:’GET’,url:’/xx.php’}).

success(fn).

error(fn)

简化版用法 $http.get(‘url’).success(fn);

$http.get(‘url’).success(fn);

5.ng模块提供的directive组件

1.ngApp

2.ngInit

3.ngBind

4.ngIf

5.ngRepeat

6.ngClick

7.ngMouseOver

8.ngSrc 为img标签指定src属性 可以防止404

9.ngShow 若赋值为true 则display:block 否则display:none

10.ngHide 若赋值为true 则display:none 否则display:block

6.ng模块提供的过滤器

Filter:把Model数据在显示时以某种特定的格式呈现

1.lowercase

{{表达式|lowercase}}

2.uppercase

3.number

4.currency

5.date

7.单页页面与多页页面

多页应用单页应用(spa)
项目中有多个完整的HTML页面项目中只有一个完整的HTML页面(其他都是html片段)
使用超链接,js实现跳转使用超链接,伪js
所有的页面请求都是同步的-客户端等待服务器响应时浏览器一片空白所有的“伪页面请求”都是异步请求-客户端在等待下一个页面片段到时,仍可以显示前一个页面内容
不便于实现两个页面间切换过场动画很容易实现两个伪页面间的过场切换动画
浏览器需要不停的创建(删除)完整的dom树浏览器只需要创建一个完整的dom树 此后的伪页面切换只是在换某个div中的内容
每个页面需要加载自己的css和js文件整个项目的css和js文件只需要加载一次

手动实现 单页面应用的步骤

1)创建一个完整的html页面 引入所需的所有css和js body中只需要一个伪页面的容器元素

2)创建若干个伪html页面/模板页面 只需要声明html片段

3)客户端请求完整的html页面 同时url中再追加一个特殊的标记

如index.html#/start-指定要加载的伪页面的名称

4)浏览器解析出的伪页面名称 查找一个字典 找到该名称对应的模板页面的url

window.location.hash

/start => template/main.html

/m => template/main.html

5)客户端发起异步ajax请求 获取模板页面的内容

加载到index.html的伪页面容器中

index.html 路由地址 模板页面

8.ngRoute

route: 路由 通过某条路径找到目标内容

ngRoute: 根据浏览器中url的特殊地址标记(形如#/xxx)

查找到该标记对应的模板页面 异步加载到当前页面的ngView指令中

1.创建一个完整的html页面 其中声明一个容器 ngView指令 引入angular.js和angular-route

2.创建多个模板页面(习惯上放在一个特别的目录下 如tpl)

3.创建Module 声明依赖于ng和ngRoute两个模块

4.在Module中配置路由字典

5.在浏览器中测试

http://IP地址/index.html#/路由地址

6.ng-view跳转

超链接

js location.href=”#/路由地址”

$scope.jump = function(){

//不能使用多页面跳转

$location.url(‘#/路由地址’)

}