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標籤失效