加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 17:16:47 所属栏目:安全 来源:网络整理
导读:我在Angular 1.x项目中有一个场景,我需要在指令中查看控制器表单,以执行表单$dirty check.一旦页面上的表单变脏,我需要在注入的服务中设置一个标志. 这是一般指令代码: var directiveObject = { restrict: 'A',require: '^form',link: linkerFn,scope: { ng
我在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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读