今天在使用ui-datepickerd的時候,出現的一個問題。數組
在輸入框中輸入非法數據,而不是經過選擇日期的控件來選擇日期,表達此時的狀態處於非法狀態,可是當我使用$setPristine()函數的時候,它並不能清楚掉當前狀態,繼續走下去,它的狀態依舊沒有改變,緣由是:函數
"This method can be called to remove the 'ng-dirty' class and set the form to its pristine state (ng-pristine class). This method will also propagate to all the controls contained in this form."ui
這個方法並不能清楚當前的非法狀態,而是清除當前的dirty狀態。this
<button class="btn-normal" ng-click='saveClient($event)'
ng-disabled="editForm.$invalid && editForm.$dirty" ng-show="!isReadonly">保存</button>spa
$viewValue屬性保存着更新視圖所需的實際字符串。插件
$modelValue由數據模型持有。$modelValue和$viewValue多是不一樣的,取決於$parser流水線是否對其進行了操做。orm
$parsers的值是一個由函數組成的數組,當用戶同控制器進行交互,而且ngModelController中的$setViewValue()方法被調用時,其中的函數在當用戶同控制器進行交互,而且ngModelController中的$setViewValue()方法被調會以流水線的形式被逐一調用。ngModel從DOM中讀取的值會被傳入$parsers中的函數,並依次被其中的解析器處理。這是爲了對值進行處理和修飾。對象
備註:ngModel.$setViewValue()函數用於設置做用域中的視圖值。事件
ngModel.$set ViewValue()函數能夠接受一個參數。作用域
value(字符串):value參數是咱們想要賦值給ngModel實例的實際值。
這個方法會更新控制器上本地的$viewValue,而後將值傳遞給每個$parser函數(包括驗證器)。當值被解析,且$parser流水線中全部的函數都調用完成後,值會被賦給$modelValue屬性,而且傳遞給指令中ng-model屬性提供的表達式。最後,全部步驟都完成後,$viewChangeListeners中全部的監聽器都會被調用。注意,單獨調用$setViewValue()不會喚起一個新的digest循環,所以若是想更新指令,須要在設置$viewValue後手動觸發digest。$setViewValue()方法適合於在自定義指令中監聽自定義事件(好比使用具備回調函數的jQuery插件),咱們會但願在回調時設置$viewValue並執行digest循環
$formatters的值是一個由函數組成的數組,其中的函數會以流水線的形式在數據模型的值發生變化時被逐一調用。它和$parser流水線互不影響,用來對值進行格式化和轉換,以便在綁定了這個值的控件中顯示。
$viewChangeListeners的值是一個由函數組成的數組,其中的函數會以流水線的形式在視圖中的值發生變化時被逐一調用。經過$viewChangeListeners,能夠在無需使用$watch的狀況下實現相似的行爲。因爲返回值會被忽略,所以這些函數不須要返回值。
$error對象中保存着沒有經過驗證的驗證器名稱以及對應的錯誤信息。
$pristine的值是布爾型的,能夠告訴咱們用戶是否對控件進行了修改。
$dirty的值和$pristine相反,能夠告訴咱們用戶是否和控件進行過交互。
$valid值能夠告訴咱們當前的控件中是否有錯誤。當有錯誤時值爲false,沒有錯誤時值爲true。
$invalid值能夠告訴咱們當前控件中是否存在至少一個錯誤,它的值和$valid相反