Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了angularjs – 无法在Angular 1.x中观察$dirty(或$pristine)值大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Angular 1.x项目中一个场景,我需要在指令中查看控制器表单,以执行表单$dirty check.一旦页面上的表单变脏,我需要在注入的服务中设置一个标志.

这是一般指令代码

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并将其设置为本地var 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,attrs) {
        scope.watch('isDirty',function(newValue,oldvalue) {
            console.log('was: ',oldvalue);
            console.log('is: ',newvalue);
        });
    }
})

使用指令:

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

大佬总结

以上是大佬教程为你收集整理的angularjs – 无法在Angular 1.x中观察$dirty(或$pristine)值全部内容,希望文章能够帮你解决angularjs – 无法在Angular 1.x中观察$dirty(或$pristine)值所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。