angular学习阶段总结
angular的学习一直零零碎碎的,只会写基础。决心好好啃一下,把原理弄懂点,深入学一下。把脑子里记得起来的知识点罗列一下,方便回顾。
常用指令ng
- ng-app 定义一个app,是angular的入口 定义了一个$rootScope,以此为根节点开始渲染dom
- ng-init 初始化,可以初始化多个变量,用逗号分隔,赋值对象数组字符串数组都可以
- ng-controller 定义一个控制器,产生了一个$scope
- ng-model 绑定$scope上的值到html元素上,实现model和view的双向绑定
- ng-repeat 迭代数组,后面加|可以带上过滤器,比如filter:query,query也是$scope上一个属性,改变query就能过滤筛选迭代的值
- ng-class 动态自定义dom的class
- ng-bing 绑定一个值,在angualr解析渲染完毕后才把数据显示出来,避免了数据闪跳的现象
- ng-click 点击触发的事件
- ng-show 布尔值 true是显示 反之隐藏,也可以写条件
- ng-hide 和show相反
- ng-if 和if的道理一样
- ng-include 包含进来公共页面,可以ng-include=”‘header.html’”(里面要加上单引号,不然会认为是个变量,应该是个表达式)
自定义指令directive
指令有两种 一种是修改template的,组件式指令替换dom,另一种是装饰性指令,是进行操作的
restrict:用来限定指令在html中出现的位置 AEMC —> 属性 元素 注释 类
replace: true的时候会把指令本身替换掉
|
|
scope:指令中作用域的绑定
- @ 把当前属性当作字符串传递 也能以取外层scope的值
- = 和父scope中的属性双向绑定
- & 传递父scope中的函数以供调用
link:连接函数,实现dom操作和scope赋值
|
|
controller是link中的第四个参数,要先require进来,require的指令前缀有四种:
- ? 指令同级下查找,找不到赋予null
- ^ 同级和上级中查找,找不到报错
- ^? 同级和上级中查找,找不到赋予null
- 无前缀 同级下查找,找不到报错
|
|
transclude,描述是否嵌入指令内部的dom。指令中的transclude属性有三种值,true、false、object,object是定义多个嵌入点的的。
下面的例子中,页面渲染后ng-transclude中的是<div>这是原来的内容</div>
|
|
注意点:
- 在html用指令的时候,要讲单词用-分开,并且首字母小写,例如
my-model
- 而在定义的时候要遵循驼峰命名法,例如
myModel
- directive中的scope是参数,$加不加无所谓的
scope,element,attrs
分别是作用域、当前dom的jq对象(内置jqlite)、属性的对象(集合)
服务
angular里内置的服务都是以$开头的
$http
封装了jq的$ajax对象,get post delete
$timeout
延时器的封装,在控制器注入服务,用法和原生几乎相同
provider
|
|
自定义服务有封装好的factory servive value constant,都是通过provider封装的
provider定义的服务,注入到控制器中,等于new一个实例,返回的是return中的内容,可以直接调用其中的方法,myService[‘+’] 、myService.add这样。
对服务进行配置的时候,config配置此服务返回的是整个myService。
用factory定义服务
|
|
返回一个对象 myService
,以供别的组件来注入,然后调用对象里面定义的各种方法。模块化的开发,便于复用。
用service定义服务
|
|
注入的时候等于在实例化服务,调用对象的方法
value constant服务
|
|
Scope
scope是一个上下文对象,是双向数据绑定和mvc的基础
3个scope
- 全局 $rootScope,在指定ng-app的时候就产生
- 控制器 $scope,在指定ng-controller的时候产生
- 自定义指令 scope,是自定义指令定义的第一个参数
scope内置属性
- console.log一下$scope,没有绑定属性的$scope也不是空的,原型链上有很多属性
- $开头的属性是可以调用的,$$开头的是禁止调用的是私有属性
生命周期
创建 -> 注册监控者 -> 模型变化 -> 检测变化 -> 销毁
- 在定义控制器的时候创建
- 注册监听
$watch
- 销毁监听
$destory
$watch,$apply
注册监听,注册就添加一个$$watcher(观察者),$apply强行进行脏值检查。