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