>>>>>Bear in mind that simply setting an inputs $dirty to false (even when there are no other dirty controls) will not cause the form $dirty to be re-evaluated. You may need something like this in your directive after $setPristine():
var dirty = false;
>>>>>angular.forEach(scope.theForm, function (value, key) {
>>>>> if (key[0] != '$') {
>>>>> if (value.$dirty) {
>>>>> dirty = true;
>>>>> }
>>>>> }
>>>>>});
>>>>>if (!dirty) {
>>>>>scope.theForm.$setPristine();
>>>>>}
This will reset the form if all inputs are pristine.....
>>>>>
>>>>
>>>>For this code to work do I need to add
>>>>
>>>>require: ['^form'],
>>>>
>>>>and use scope.form syntax where you used scope.theForm
>>>>
>>>>?
>>>'theForm' needs to be the name you have given to the angular form containing the inputs - I'm afraid that doesn't make the directive very portable.
>>>
>>>Maybe there's a better way of identifying the FormController that doesn't rely on the name......
>>
>>For now I tried without that addition with a very slight change:
>>
>>
>>element[0].bind('blur', function () {
>> ctrl.$setPristine();
>> scope.$apply();
>> })
>>
>>e.g. I used element[0] instead of just element. But I am getting this error
>>
>>TypeError: undefined is not a function
>>
>>I can remove [0] if that's the source of the error. What do you think?
>
>Remove it...
Thanks, removing that [0] worked as the control is now in pristine state but the form isn't. I think using that syntax I showed should work and I don't even have to pass the name of the form, but I'll try that.
Thanks again.
If it's not broken, fix it until it is.
My Blog