Angular1回顾
angular1自2009年出来之后一直很火,但也有不少弊端:比如十分影响性能的dirty check;所以google对angular2的设计可谓是完全颠覆,和vue.js,react.js类似,都跟上了组件化开发的新趋势,angular1确实是处于一种完全尴尬的境地; 这里就只当“温故”吧
directive
angular1被人吐槽的一点就是太多新的概念,学习曲线太陡。要说其中最常用也比较难以运用的就是directive了,directive实际上就是一种组件化的思想,一个指令封装dom操作和相应逻辑,达到封装一次,到处使用的目的
这个很实用,比如之前做的一个ionic的app。有多个列表页,当时为了赶时间就没有进行指令化,连续写了四个很类似的页面,修改起来也很麻烦。
以下贴一个例子:
其中scope就是指令内的作用域,一旦定义scope属性,就隔离了外部作用域。如果不定义这个,那么指令作用域就会自动继承父级作用域,这里就是controller的作用域scope
scope中可以用来接收外部传参,’=’是双向绑定,@是单向绑定,&是绑定方法
transclude的使用也是一个重点。比如上述代码,那么最终会被解析为‘Tobias’,因为transclude:true,和ng-transclude的配合使用使得指令作用域中包含的html拥有了指令外部的作用域(也就是controller作用域)而不是指令内部的作用域。
The transclude option changes the way scopes are nested. It makes it so that the contents of a transcluded directive have whatever scope is outside the directive, rather than whatever scope is on the inside.
这一点还是改变不了的。其实这是有必要的,因为内部元素要独立出来,证明是想获得外部作用域的,否则完全可以直接放在template模板中
controller属性可以是一个字符串或者一个函数,如果值为字符串,会以字符串的值为名字来查找注册在应用中的控制器的构造函数,
如果为匿名函数则与link函数类似,但link只能在当前指令中定义行为,无法在指令间复用,而controller却可以复用
config和run
|
|
config方法是唯一能在应用启动之前修改的部分,config只支持部分的类型注入:provider和constant。这证明只有通过provider自定义的service和.constant声明的常量才能够被注入
run方法则是在注入器创建之后被执行。它是angularjs应用中第一个被运行的方法,运行块常用于注册全局的时间监听器
services
服务也是angular的重要组成部分,与controller每次被销毁和新建不同,service是单例的,且是懒加载。并且一旦被创建不会被销毁,知道应用结束。
除常用的factory创建服务之外,还有:
service()
constant()
value()
provider()
几种创建服务的方法
factory实际是provider方法注册服务的简写方式。
但有一点区别,provider生成的服务可以被注入到config方法中,但是factory则不行