Angular
provider的关系 https://segmentfault.com/a/1190000003096933
基本指令
no-repeat是所有内置指令中优先级最高的。
ng-app
指定AngularJS脚步执行作用域ng-model
绑定html元素到数据ng-init
初始化数据ng-if
从dom删除元素ng-switch
如同switch适用于多个例子,有ngSwitchCase ngSwitchDefaultng-hide
从dom隐藏元素ng-options
这个有点多,放下面单独列一项ng-disabled
绑定数据到html的disabled属性ng-show
ng-hide
ng-bind
是指定数据,和差不多
ng-cloak
加载时防止代码未加载完而发生的闪烁ng-model
是双向绑定, 在ng-repeat
中ng-model
必须和ng-change
连用ng-class
绑定css:
- ng-class=”name” css类绑定变量name
- ng-class=”{true: ‘active’, false: ‘inactive’}[isActive]” 变量isActive为true时绑定active,为false时绑定inactive
- ng-class=”{‘sty1’: active, ‘sty2’: inactive}” active为true增加sty1,inactive为true增加sty2
- ng-class=”[sty1, sty2]”
ng-include
用于包含外部的html文件,包含的内容将作为知指定元素的子节点<div ng-include="'myfile.html'">
注意:它是一个双引号和一个单引号element ng-include="'filename'" onload="" autoscroll=""
<ng-include src="finelname" onload="" autoscroll="">
onload 文件载入后执行的表达式
autoscroll 是否指定视图的可滚动
ng-repeat
它里面有几个属性可以直接放html使用:
$index 序列号
$first 第一个元素是它是true,其它false ($last同理)
$middle 是否在中间
$even $index的值是否是偶数
$odd $index的值是否是奇数
|
|
angular.module(name,[requires],[configfn])
一个参数是获取,一个以上是创建。
先用ng-app
指定模块名,再用angular.module
创建对应angular的模型。模型是当前元素拥有的作用域。
再用ng-controller
指定控制名,再用模型名.controller
创建对应angular的控制器。控制器是当前元素的控制器
最后用$scope
来添加要控制的属性
每个模型有个$rootScope
是根,是各个controller中scope的桥梁。
angular.extend
对象第一层拷贝,如果第一层有属性则引用属性,返回结果angular.extend(a, b, c) //依次将c和b的第一层属性拷贝给a,如果有属性则引用拷贝过去,返回a
module
angular.module('phonecatApp', ['phoneList']);
这个表示phonecatApp
是依赖phoneList
的;可以引用里面的服务和组件等。
但是有个问题就是,在html
它会被定义到后面的DOM
元素覆盖。
错误认识
ng-repeat
和ng-controller
不能放到同一元素(这个纠结了好久),如果放都要用奇淫技巧。
过滤器
|
|
服务
它封装了很多浏览器东西,来作为自己的内建服务。
表格
感觉里面的$odd
等是内部的
自定义指令
必须先建个前缀代码自己的命名空间, 如:
一般属性:
全局API
angular.isString();
angular.isNumber();
依赖注入
|
|
上面的注入,除了config
有点特殊,其它都可以互相随意注入放置.
路由
router的url:https://github.com/angular-ui/ui-router/wiki/URL-routing
|
|
module.run
config执行后就run,然后才是后面的
run可以直接注入config和provided,和controller差不多
resource
它封装了http,使的webapi连续等。
/:resource_id.:format 遇见.
它会默认跳过,如:/:resid/:fo.json
- 第一个参数是url
- 第二个是为参数设置默认值;
- url参数默认值,多余的会被添加到
?
后,即当做api参数e.g.给定模板/path/:verb与参数{verb:’greet’,salutation:’Hello’},将得到URL/path/greet?salutation=Hello
- url参数默认值,多余的会被添加到
- 参数以
@
为前缀,表示此属性的值,从调用第三个参数的结果对象中取对应的属性值。
- 参数以
- 第三个参数; {action: {method, params, isArray, headers…..}}
|
|
$modal的用法
- 新版本的angular-ui-bootstrap, 是
$uimodal
和$uimodalInstance
- 为了传递数据请多用resolve,scope属性会多建一个
- 注意下面代码中弹出类的三个参数传入
angular弹出窗口,使用:
templateUrl: 模态窗口地址, 相应html用id
标志
template:用于显示html标签
scope:一个作用域为模态的内容使用(事实上,$modal会创建一个当前作用域的子作用域)默认为$rootScope
controller:为$modal指定的控制器,初始化$scope,该控制器可用$modalInstance注入
resolve:定义一个成员并将他传递给$modal指定的控制器,相当于routes的一个reslove属性,如果需要传递一个objec对象,需要使用angular.copy()
backdrop:控制背景,允许的值:true(默认),false(无背景),“static” - 背景是存在的,但点击模态窗口之外时,模态窗口不关闭
keyboard:当按下Esc时,模态对话框是否关闭,默认为ture
windowClass:指定一个class并被添加到模态窗口中
open方法返回一个实例,该实例具有如下属性:
close(result):关闭模态窗口并传递一个结果
dismiss(reason):撤销模态方法并传递一个原因
result:一个契约,当模态窗口被关闭或撤销时传递
opened:一个契约,当模态窗口打开并且加载完内容时传递的变量
|
|
|
|
|
|
resolve
ui-router
和modal
都用到它,我就仔细看了下。
路由弹出也好,窗口弹出也是。为了让界面显示前准备好数据而使用这个属性(网络数据获取等)
它会在之前被设定好,再注入到控制器中
|
|
animation
ng-options
|
|
track by
单独放一项是因为它和ngoptions
/ngrepeat
都相关。
但是我认为如果有个id我ngoptions
何必用这个再去筛选,就没看。
主要说下ngrepeat
<div ng-repeat="link in links" ></div>
当links=[“1”, “1”, “4”,”4”]时angular会报错,不允许重复
这时要么给这些加个属性id用来标志,”link in links track by link.id”
要么懒惰的用 “link in links track by $index”
- 还是上面的例子,当links发生变化时。必然会让删除已有dom,再重新添加新的。1.2添加的新机制会修改已有的不会重新创建。但是这个就只能用第一种方法了,不能再
$index
偷懒了。
- 还是上面的例子,当links发生变化时。必然会让删除已有dom,再重新添加新的。1.2添加的新机制会修改已有的不会重新创建。但是这个就只能用第一种方法了,不能再
查找dom
jqLite
太难用了,返回的还是它的对象。算了。
用这个,正好还可以找到属性对应的dom
this和$scope
今天想起对比下这俩个:
用
$scope
123function dd($scope) { $scope.test = "dd"; }<div ng-controller="dd"> {{test}} </div>用
this
123function dd() { var vm = this; this.test = "dd" ;}<div ng-controller="dd as vm"> {{vm.test}}</div>
使用起来一个麻烦js文件,一个麻烦html文件,但效果无异。
但是区别在于$scope
可以访问到父类的$scope
的属性和成员;但是当具有相同属性或成员时,$scope
就拥有自己的空间,并不会覆盖。
angular思想
Angular分俩个块儿:配置块和运行块(它更多的在于思想)
配置块angular.config
这个会在配置块执行,然而上面的依赖注入只有provider
才能在配置块被执行。
所以设计provider
为初始化设置,$get
返回一个对象,让所有注入
factory
要返回一个对象,所以一般被设为仅仅需要的是一个方法和数据的集合且不需要处理复杂的逻辑的时候service
当使用在功能控制比较多的service里面
provide.decorator
这个功能用于向已有的服务里面添加新的功能
|
|
|
|
provider笔记
初始化必须
|
|
ocLazyLoad
|
|
UI-Router
跳转方式
$state.go()
ng-href: 会ng-href="/av/"
ui-sref: 这个需要url那边配合 https://github.com/angular-ui/ui-router/wiki/URL-Routing#url-parameters
href
父子路由
123456789101112131415161718192021.state('blog', ...).state('blog.index', ...);//通过名称中的一个`.` 来区分父子路由.state('list', {parent: 'contacts', //指定父路由})//子路由会继承父路由的依赖注入项resolve: {rea:...}resolve: {reb:...}conttroller: function(rea, reb) {...}//子路由会继承父路由的data属性,并可以重写$stateProvider.state('parent', {data: {...}})function Ctrl($state){console.log($state.current.data.customData1) // outputs 5;console.log($state.current.data.customData2) // outputs "blue";}abstract
官方说这个是为了方便定义虚拟的父,有段url是为所有子节点准备。
里面必须有ui-view
https://github.com/angular-ui/ui-router/wiki/Nested-States-&-Nested-Views
- views
当一个html出现多个ui-view
时使用12345<body><div ui-view="filters"></div><div ui-view="tabledata"></div><div ui-view="graph"></div></body>
|
|
多视图的命名允许使用相对和绝对
|
|
- $urlRouterProvider
|
|
最后给个api查询 ##: https://github.com/angular-ui/ui-router/wiki/Quick-Reference
多个视图
|
|
|
|
多层视图
|
|
|
|
|
|
translate
可以作过滤使用
可以作属性使用
还可以指定参数:
translations
注册preferredLanguage
选择默认语言。 等同use
fallbackLanguage
动态切换语言时,先fall再use就好了。
useLocalStorage
为了方便快速切换,提供storage来。localstorage依赖cookiestorage。
useStaticFilesLoader
使用静态文件