Angularjs 无法在Angular 1.x中查看表单$dirty(或$pristine)值
我在Angular 1.x项目中有一个场景,我需要观察指令中的控制器表单,以执行表单$dirty检查。一旦页面上的表单变脏,我就需要在注入的服务中设置一个标志 以下是一般指令代码:Angularjs 无法在Angular 1.x中查看表单$dirty(或$pristine)值,angularjs,Angularjs,我在Angular 1.x项目中有一个场景,我需要观察指令中的控制器表单,以执行表单$dirty检查。一旦页面上的表单变脏,我就需要在注入的服务中设置一个标志 以下是一般指令代码: var directiveObject = { restrict: 'A', require: '^form', link: linkerFn, scope: { n
var directiveObject = {
restrict: 'A',
require: '^form',
link: linkerFn,
scope: {
ngConfirm: '&unsavedCallback'
}
};
return directiveObject;
function linkerFn(scope, element, attrs, formCtrl) {
...
scope.$watch('formCtrl.$dirty', function(oldVal, newVal) {
console.log('form property is being watched');
}, true);
...
}
以上内容仅在初始化期间进入手表,因此我尝试了其他方法,结果相同:
监视范围。$parent[formName]。$dirty(在本例中,我在attrs中传递formName,并将其设置为本地变量formName=attrs.formName)
监视element.controller()[formName](与上述结果相同)
我看过其他关于这个问题的SO帖子,并尝试了列出的解决方案。看起来它应该可以工作,但不知何故表单引用(表单属性引用)超出了指令的范围,因此没有被监视
如有任何建议,将不胜感激。
谢谢。我不知道手表为什么不工作,但是作为传递整个表单的替代方法,您只需将
$dirty
标记本身传递给指令即可。即:
.directive('formWatcher', function() {
restrict: 'A',
scope: {
ngConfirm: '&unsavedCallback', // <-- not sure what you're doing with this
isDirty: '='
},
link: function(scope, element, attrs) {
scope.watch('isDirty', function(newValue, oldValue) {
console.log('was: ', oldValue);
console.log('is: ', newValue);
});
}
})
指令('formWatcher',函数(){
限制:“A”,
范围:{
ngConfirm:“&unsavedCallback”,//您的手表中似乎缺少表单名称。作为旁白,您的手表上的
oldVal
和newVal
函数已反转。谢谢,这工作得很好。是的,我也不明白手表为什么不工作。没有任何要调试的错误。刚刚调用了ngConfirm回调根据需要在代码的后面(它是一个可选项,用于在提供时执行额外的逻辑)
<form name="theForm" form-watcher is-dirty="theForm.$dirty">
[...]
</form>