今天在使用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相反