Angular1学习记录
整理文件夹的时候发现了蛮早之前写的Angular1的笔记,搬到博客来。
基本
|
|
模板
|
|
样式
|
|
Form
- $pristine: 表单或控件是否未输入过
- $dirty: 表单或控件是否已输入过
checkbox/radio 不具备控件验证功能
|
|
过滤器
|
|
搜索
|
|
作用域
|
|
子作用域和父作用域属性值重合时,先访问子作用域的对象,找不到再访问父作用域对象
通过作用域中的事件传播数据的功能十分有限,只能调用Angular中的$emit和$broadcast方法。
$broadcast(eventname, data):
将事件从父级作用域传播至子级作用域$emit(eventname, data):
将事件从子级作用域传播至父级作用域$on(eventname,function(event,data){}):
在作用域中监控传播来的事件并获取相应的数据
依赖注入
|
|
后者是实际执行的本质:创建一个控制器时,,实际上在config函数中调用controllerProvider服务的register方法,依赖注入
一般流程:
config -> $provide服务 -> provider,factory,service,value 方法,
创建一个自定义的依赖注入对象,最上层可以直接使用return方法
factory
|
|
通过factory方法创建的服务代码,完全可以使用service方法来代替。但如果service方法创建的服务,使用factory方法代替时,需要先将service中的回调函数单独创建一个自定义函数,然后在factory的回调函数中使用关键字new实例化这个函数,并返回实例化后的对象。
constant:返回常量,可用于创建配置数据,可以注入配置函数config中
value:返回常量,创建对象和函数,不能注入到config中$inject 方式的依赖注入的服务名和顺序必须与函数在构造时的参数名和顺序完全一致
$inject api
injector.has(‘$方法name’)
注册列表中查找相应服务,有返回trueinjector.get(‘$方法name’)
var a = injector.get(‘$方法name’) 获得服务的实例对象后可以直接调用 a.test()injector.invoke(‘自定义fun’)
执行一个自定义函数(立即触发)
ng-view
切换视图模板
服务
单例对象:每一个应用中只会被实例化一次
$scope/$http/$window/$location
装饰器
|
|
$http
刷新页面后缓存内容都会丢失
|
|
|
|
|
|
缓存服务:$cacheFactory
|
|
$resource
优于 $http
|
|
注入时使用[‘ngResource’]
- get类:get/query
- 非get类:save/delete/remove
$promise
|
|
$http中使用$promise
directive
|
|
四种使用方式:
属性
- transclude
取值:true/false
利用ng-transclude方式替换指令元素中的内容,如果是纯文本,加span标签
|
|
|
|
|
|
- link
link属性的值是一个函数,在该函数中可以操纵dom元素
|
|
compile
与link不可同用scope
取值:true/false
false时:不创建新的作用域,父与子作用域的数据完全相同,两方相互关联,一起变化。
属性值还可以设置为json:绑定策略:@ = &require
创建子指定时添加,格式:require:’^?myParentDirective’ ,与controller一起使用controller
在创建父指令时添加,可以被实例的对象所继承,与require一起使用
$location服务
只读方法:
absUrl, protocol, host, port
读写类方法:
|
|
事件
$locationChangeStart :
参数:current 当前地址 previous:上一个地址$locationChangeSuccess
路由模式:标签(hashbang)和HTML5模式
常见问题:
- setTimeout:->$timeout()
- 防止应用闪烁: ng-cloak
AngularJS 应用在加载时,文档可能会由于AngularJS 代码未加载完而出现显示 AngularJS 代码,进而会有闪烁的效果, ng-cloak 指令是为了防止该问题的发生。
|
|
ng-repeat:
如果有过滤器,不能使用$index索引定位元素np-repeat:
track by加快加载速度 ng-repeat=”user in users track by user.id”解决单击事件的冒泡现象:$event.stopPropagation()
释放多余的$watch监测函数:
定义$watch事件内容为空利用ng-show代替ng-if:
因为ng-if下的元素是一个子级作用域,无法直接在scope中修改,需要绑定的方式是ng-model=”$parent.b”在浏览器标题栏中会在一瞬间看到如Google Phone Gallery:这样的信息,但其实这不是你希望的(这时angular的数据绑定还没有起作用,就造成了前面的原始数据显示,和后面起作用后的正确显示),对此一个更好的处理方法是使用ngBind或者ngBindTemplate命令,这使得在加载器无关的信息对用户来说是不可见的:
1<title ng-bind-template="Google Phone Gallery: {{query}}">Google Phone Gallery</title>把ng-src指令替换为原来的src属性:
使用诸如Firebug之类的工具或者Chrome浏览器的Web开发组件观察web访问日志,可以观察到如/app/%7B%7Bphone.imageUrl%7D%7D 或者/app/这样的无效请求,这些无效请求就是浏览器在Angular还没有正确初始化和进行数据绑定(注入)时,构建img标签时发出的,这使得图片不能正确显示。