动态添加 ng-pattern,缺少验证 类

Dynamically adding ng-pattern, missing validation classes

我正在尝试动态添加和删除指令中的 "ng-pattern" 属性。这是我的指令:

ap.directive('myDirective', ['$compile', function ($compile) {
    return {
        scope: { test: "=myDirective" },
        link: function ($scope, element, attrs) {
            $scope.$watch('test', function () {
                if (someCondition) {
                    element.removeAttr("ng-pattern");
                } else {
                    element.attr("ng-pattern", "/^([0-9]{5})$|^([0-9]{9})$/");
                }
            });
        }
    };
}]);

以及来自 html 的输入标签:

<form name="myform" novalidate>
    <input name="test" required class="form-control" ng-model="myModel" my-    directive="someValueFromScope"/>
</form>

如果我检查 Chrome 开发工具中的 DOM 元素,"ng-pattern" 属性会添加到输入标签,但验证 类 (ng-invalid -pattern 或 ng-valid-pattern) 未添加。如果我直接从 html 添加 "ng-pattern",一切都会按预期进行。

为此使用 $compile 和 $set :-

attrs.$set("ng-pattern", "/^([0-9]{5})$|^([0-9]{9})$/");
$compile(element)($scope);

使用 $observe 方法代替 $watch

attrs.$observe('test', function () {
      //do something
});

我终于明白了,编译父作用域就成功了。

$compile(element)($scope.$parent)