Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 无法在Angular 1.x中查看表单$dirty(或$pristine)值_Angularjs - Fatal编程技术网

Angularjs 无法在Angular 1.x中查看表单$dirty(或$pristine)值

Angularjs 无法在Angular 1.x中查看表单$dirty(或$pristine)值,angularjs,Angularjs,我在Angular 1.x项目中有一个场景,我需要观察指令中的控制器表单,以执行表单$dirty检查。一旦页面上的表单变脏,我就需要在注入的服务中设置一个标志 以下是一般指令代码: var directiveObject = { restrict: 'A', require: '^form', link: linkerFn, scope: { n

我在Angular 1.x项目中有一个场景,我需要观察指令中的控制器表单,以执行表单$dirty检查。一旦页面上的表单变脏,我就需要在注入的服务中设置一个标志

以下是一般指令代码:

            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>