>>>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?
If it's not broken, fix it until it is.
My Blog