標籤:mod 解析 url font 返回 出錯 調用 驗證 變更
angular.copy()深拷貝
angular提供了一個可以複製對象的api——copy(source,destination),它會對source對象執行深拷貝。
使用時需要注意下面幾點:
- 如果只有一個參數(沒有指定拷貝的對象),則返回一個拷貝對象
- 如果指定了destination,則會深拷貝對象複製給destination
- 如果source是null或者undefined,那麼會直接返回source
- 如果source就是desitination,那麼會報錯。
angular.equals()比較對象
AngularJS中的angular.equals()方法用於比較兩個對象、值或運算式是否相等。AngularJs文檔中對equals方法比較的原則是這樣描述的:
(1)比較的兩個對象或值能夠通過 === 運算式。===要求兩個值不僅值相同,類型也要相同,也就是說,1 === “1”是不成立 的。
(2)比較的兩個對象或值是相同類型的,而且它們所有的屬性通過angular.equals()方法判斷都是相等的。
(3)兩個值都為(NaN)。(在JavaScript中認為NaN == NaN是false)
(4)兩個值代表字面上相等的運算式,如兩個Regex:/abc/與/abc/是相等的。
angular $apply()
$apply方法傳播Model的變化。
那我們到底什麼時候需要去調用apply()方法呢?情況非常少,實際上幾乎我們所有的代碼都包在scope.apply()裡面,像ng?click,controller的初始化,http的回呼函數等。在這些情況下,我們不需要自己調用,實際上我們也不能自己調用,否則在apply()方法裡面再調用apply()方法會拋出錯誤。如果我們需要在一個新的執行序列中運行代碼時才真正需要用到它,而且若且唯若這個新的執行序列不是被angular JS的庫的方法建立的,這個時候我們需要將代碼用scope.apply()包起來。
我是這樣理解的該函數用於更新view的value,當需要變更view values時,需要調用該方法。典型地,這個函數由DOM的事件處理函數來調用。
比如,一個input directive在當它的input變更時就會調用$setViewValue,再比如:select控制項在當一個option被選擇時也會調用這個函數更新view value。
當視圖需要更新的時候會被調用。使用ng-model的指令應該自行實現這個方法。
該方法用於判斷輸入值是否為空白。
例如,使用ngModelController的指令需要判斷其中是否有輸入值的時候會使用該方法。該方法可用來判斷值是否為undefined,‘‘,null或者NaN。
你可以根據自己的需要重載該方法。
- $setValidity(validationErrorKey, isValid);
該方法用於改變驗證狀態,以及在控制變化的驗證標準時通知表格。
這個方法應該由一個驗證器來調用。例如,一個解析器或者格式化函數。
該方法用於設定控制到原始狀態。
該方法可以移除‘ng-dirty‘類並將控制恢複到原始狀態(‘ng-pristine‘類)。
該方法用於取消一次更新並重設輸入元素的值以防止$viewCalue發生更新,它會由一個pending debounced事件引發或者是因為input輸入框要等待一些未來的事件。
該方法用於是為了在指令中改變ng-model綁定的值,適用於使用了獨立範圍的指令(在沒有雙向繫結屬性的情況下,無法通過scope進行賦值)。
angularjs 的筆記