angularjs – 无法在Angular 1.x中观察$dirty(或$pristine)值

前端之家收集整理的这篇文章主要介绍了angularjs – 无法在Angular 1.x中观察$dirty(或$pristine)值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Angular 1.x项目中有一个场景,我需要在指令中查看控制器表单,以执行表单$dirty check.一旦页面上的表单变脏,我需要在注入的服务中设置一个标志.

@H_404_8@

这是一般指令代码:@H_404_8@

@H_404_8@

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);               

          ...
        }

以上只是在初始化期间进入手表,所以我尝试了其他方法,结果相同:@H_404_8@

观察范围.$parent [formName].$dirty(在这种情况下,我在attrs中传递formName并将其设置为本地var formName = attrs.formName)@H_404_8@

看element.controller()[formName](与上面相同的结果)@H_404_8@

我查看了有关该问题的其他SO帖子,并尝试了列出的解决方案.它似乎应该工作,但不知何故,表单引用(表单属性引用)超出了指令范围,因此没有被监视.@H_404_8@

任何意见,将不胜感激.
谢谢.@H_404_8@

解决方法

我不知道为什么那个表不起作用,但作为传递整个表单的替代方法,你可以简单地将$dirty标志传递给指令.那是:

@H_404_8@

@H_404_8@

.directive('formWatcher',function() {
    restrict: 'A',scope: {
        ngConfirm: '&unsavedCallback',// <-- not sure what you're doing with this
        isDirty: '='
    },link: function(scope,attrs) {
        scope.watch('isDirty',function(newValue,oldValue) {
            console.log('was: ',oldValue);
            console.log('is: ',newValue);
        });
    }
})

使用指令:@H_404_8@

@H_404_8@

<form name="theForm" form-watcher is-dirty="theForm.$dirty">
    [...]
</form>

猜你在找的Angularjs相关文章