angular使用进一步总结

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个,如下图:
   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标签失效