я использовал решение @ overthink, но столкнулся с проблемой, упомянутой @dmitankin. Однако я не хотел прикреплять обработчик к событию фокуса. Поэтому вместо этого я попытался переопределить $ первозданное свойство и заставить его всегда возвращать false. Я закончил использование Object.defineProperty, который не поддерживается в IE8 и ниже. Есть workarounds сделать это в тех старых браузерах, но я им не нужны, поэтому они не являются частью моего решения ниже:
(function() {
angular
.module("myapp")
.directive("noDirtyCheck", noDirtyCheck);
function noDirtyCheck() {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, elem, attrs, ctrl) {
var alwaysFalse = {
get: function() { return false; },
set: function() { }
};
Object.defineProperty(ctrl, '$pristine', alwaysFalse);
Object.defineProperty(ctrl, '$dirty', alwaysFalse);
}
};
}
})();
Я также переопределяя $ загрязнен, поэтому он не может быть установлен как грязный тоже.
Большое вам спасибо! – cheeesus
Когда я нажимаю пробел в текстовом поле, форма не становится грязной, – Developer