angular-所见即所得的表单验证

angular-wysiwyg form validation

我正在尝试使用 angular-wysiwyg 和表单验证。我没有使用标准 form.textArea.$dirty,而是在范围上更新了一个标志:

$scope.onTextChange = function (value) {
  $scope.textContent = value;
  $scope.isContentDirty = true;
  ...
}

然后我可以在我的按钮上使用 属性:

<button ng-diabled="isContentDirty"></button>

但我更愿意这样做:

<wysiwyg name="myTextArea" ng-model="textContent"></wysiwyg>

<button ng-disabled="!form.myTextArea.$dirty></button>

我怎样才能完成这项工作?

这是一个相关的未决问题:
https://github.com/TerryMooreII/angular-wysiwyg/issues/43

以下是该指令的文档:https://github.com/TerryMooreII/angular-wysiwyg#usage

我找到了一个让我很开心的解决方案。原来可以通过引用来检查任意一个表单项的有效性,即:

myForm.editor.$error

这将在此处引用 "editor" 表单项上的错误:

<form name="myForm">
    <wysiwyg name="editor"></wysiwyg>
</form>

当您转到指令中的 link 步骤时,您可以设置 $parsers,这实际上允许您在满足某些条件时使表单无效:

angular.module('foo').directive('wysiwyg', function() {
    return {
        restrict: 'E',
        require: 'ngModel', //the 'value' of the form item
        template: 'my template',
        link: function(scope, elem, attrs, ngModel) {

            function checkCustomError(viewValue) {
                valid = viewValue.someCondition === 'someValue';
                ngModel.$setValidity('customError', valid);
                return viewValue;
            }

            ngModel.$parsers.unshift(checkCustomError);
        }
    }
}

错误会出现在 formName.directiveName.$error.customError

还有其他方法可以使 ngModel 无效,例如将 ng-maxlength 放在指令上,但我认为这是最有用的解释方式。