Angularjs 带有验证包装器的指令

Angularjs 带有验证包装器的指令,angularjs,validation,angularjs-directive,Angularjs,Validation,Angularjs Directive,我正在尝试创建一个指令,该指令将具有完整的引导表单字段布局以及表单验证消息等,并从javascript模型定义控制html,我认为这将很简单,但现在看起来不是这样 目前,我为每个字段编写了以下模板: '<div ng-form="myform">' + '<div class="control-group" class="{{options.class}}" >' + '<div class="control-label">{{

我正在尝试创建一个指令,该指令将具有完整的引导表单字段布局以及表单验证消息等,并从javascript模型定义控制html,我认为这将很简单,但现在看起来不是这样

目前,我为每个字段编写了以下模板:

'<div ng-form="myform">' +
        '<div class="control-group" class="{{options.class}}" >' +
        '<div class="control-label">{{options.label}} {{options.required ? "*" : ""}} </div>' +
        '<div class="controls">';

    html += '<input type="number" name="myfield" placeholder="{{options.placeholder}}" ng-required="options.required" ' +
        'ng-pattern="{{options.pattern}}" ng-minlength="{{options.minlength}}" ng-maxlength="{{options.maxlength}}" ' +
        'ng-readonly="options.readonly" autofocus="options.autofocus" ng-change="ngChange"  autocomplete="off" data-ng-model="ngModel"/>'

    html += '<div class="field-validation-error" data-ng-show="myform.myfield.$invalid && myform.myfield.$dirty"> ' +
                '<div data-ng-show="myform.myfield.$error.required ">{{options.label}} is required!!!</div>' +
                '<div data-ng-show="myform.myfield.$error.pattern">{{options.patternMessage}}</div>' +
                '<div data-ng-show="myform.myfield.$error.minlength">{{options.label}} should have atleast {{options.minlength}} character/s.</div>' +
                '<div data-ng-show="myform.myfield.$error.maxlength">{{options.label}} can have maximum {{options.maxlength}} character/s.</div>' +
                '<div data-ng-show="myform.myfield.$error.min">{{options.label}} cannot have value less than {{options.min}}</div>' +
                '<div data-ng-show="myform.myfield.$error.max">{{options.label}} cannot have value greater than {{options.max}}</div>' +
            '</div>';
因此,将此对象传递给指令,然后根据字段详细信息生成模板应该是可行的,但无法实现最终结果。我尝试过各种方法

  • 对模板和输入标记有单独的指令

    a。有一个指令“E”,它将生成输入标记,但ng change和ng model由于某些原因不同步,请检查此项:

    b。如果有一个指令“a”,它将把ng minlength、ng maxlength属性添加到输入标记中,则不会触发验证。检查这个

  • 将所有内容都放在一个指令中,但是如何将ng change、ng blur、typeahead从我的指令传递到输入标记,保持范围中的所有内容并将其添加到输入中并不理想
  • 有人能指导我怎样才能达到最终的结果吗。。 选项2适用于大多数情况,但随着场景的增加,开始出现问题,我希望不惜一切代价避免这种情况。 因此,我回到了第一个实现,即2指令方法,一个指令用于生成输入标记,另一个指令用于布局和验证

    但是,如果我将输入标记的指令设置为“E”,那么所有ng change&ng模型都需要附加$parent,因为我通过作用域获取选项,所以指令的最终用户必须记住,每次与作用域进行交互时,都要传递$parent,这在透明度级别上会降低。因此,执行“A”指令似乎是最好的方法

    有人能帮我解决问题1.b吗?这就是为什么如果我在不同于输入标签指令的指令上使用ng表单,验证就不起作用了(我知道验证是在编译阶段而不是链接阶段完成的)

    或者,如果有人能给我指出一些类似的东西,试图实现我正在努力的目标。
    注:我看了Formy angular,但它也有输入上没有ng变化等问题。是否有其他类似的解决方案。

    您需要编译该元素

    $compile(element)(scope)
    

    目前,由于您尚未编译angular,因此您不知道您在dom中所做的更改。Plnker似乎不起作用:(.是我吗?Plunks正在工作..刚刚确认。)
    $compile(element)(scope)