1、不同模块之间(或者多层父子之间传递)的controller如何调用方法?
①使用$rootScope作用域【有风险,一般不用】:在控制器中传入$rootScope,将方法绑在$rootScope上进行传值。
②找到共同的父作用域$parent
如,$scope.$parent.$parent....多级嵌套,然后将方法绑定在它们的共同根作用域上。
2、compile与link的区别
compile函数的作用是对指令的模板进行转换;
link的作用是在模型和视图之间建立关联,包括在元素上注册事件监听;
scope在连接阶段才会被绑定到元素上,因此compile阶段操作scope会报错;
对于同一个指令的多个实例,compile只会执行一次,而link对于指令的每个实例都执行一次;
一般情况下我们只要编写link函数就可以了;
compile函数会返回一个link函数供后续处理,所以写了compile函数后,再写link函数是无效的;
3、service的特性
service都是单例的;
service由$injector负责实例化;
service在整个应用的生命周期中存在,可以用来共享数据;
在需要使用的地方利用依赖注入机制注入service;
在注入的时候,自定义的service需要写在内置的service后面;
内置service的命名是以$开头的,自定义的应该避免;
其他常用的service:内置的共24个
$compile:编译服务
$filter:数据格式化工具,内置了8个
$interval
$timeout
$locale
$location
$log
$parse
$http:封装了AJAX
4、使用$filter服务
$filter是用来格式化数据的专用服务
Angular内置了9个filter:
currency、date、filter、json、limitTo、lowercase、number、orderBy、uppercase
filter可以嵌套使用(用管道符号|分割)
filter是可以传递参数的
用户可以自定义filter
5、service、provider、factory在angular内部都是调用了provider,所以他们的本质都是一样的,只是调用传递的参数不一样而已
6、angular内置的指令一共63个,如下图:
7、scope的绑定策略
@:把当前属性作为字符串传递,还可以绑定来自外层的scope的值,在属性值中插入{{}}即可
=:与父scope中的值进行双向绑定
&:传递一个来自父scope的函数进行使用
8、$scope的生命周期
creation -> watcher registration -> model mutation -> mutation observation -> scope destration
9、angular 控制器中不可操作的注意事项:
不要在控制器中直接操作dom元素,放在服务中操作
不要在控制器中格式化输入,用angular form代替
不要在控制器中过滤输出,用angular filter代替
不要在控制器中管理其他组建的生命周期,如果实例化服务
不要在控制器中共享代码或状态,用angular service代替
不要试图去复用controller,一个控制器一般只负责一小块试图
一般来说,控制器是不会互相掉用的,控制器之间的交互会通过事件进行
10、form指令
HTML中原生的form表单是不能嵌套的,而angular封装之后的form可以嵌套;
angular为form扩展了自动校验、、防止重复提交等功能;
angular为input元素的type进行扩展,一共提交了10种类型:
text、number、url、email、radio、Checkbox、hidden、button、submit、reset
angular为表单内置了4种css样式:
ng-valid、ng-invalid、ng-pristine、ng-dirty
内置校验器:
require、minlength、maxlength
11、访问表单的属性方法
访问form属性:formName.property
访问input属性:inputName.property
12、给ng-form指令添加novalidate属性可以使原生form标签失效