Javascript 在将编译后的内容添加到Angular中的ng表单后,如何重新验证表单?

Javascript 在将编译后的内容添加到Angular中的ng表单后,如何重新验证表单?,javascript,angularjs,Javascript,Angularjs,我有一个带有嵌套ng表单的表单,在每个按键上,user make脚本都会使用ng form指令将一个已编译的表单字段(如ui select、ui datepicker等)附加到容器中 在ng表单中替换内容后,如何触发验证 编辑: 以下用于将字段追加到预览中的指令: var previewDirective = function ($compile) { var link = function ($scope, $el, $attrs) { var previewFiel

我有一个带有嵌套ng表单的表单,在每个按键上,user make脚本都会使用ng form指令将一个已编译的表单字段(如ui select、ui datepicker等)附加到容器中

在ng表单中替换内容后,如何触发验证

编辑:

以下用于将字段追加到预览中的指令:

var previewDirective = function ($compile) {

    var link = function ($scope, $el, $attrs) {
        var previewField = $('.preview');

        var fields = {
            date: '<div class="datepicker-wrap" ng-controller="DatepickerCtrl"><button type="button" class="svg--center svg__calendar-gray ngapp-svg" ng-click="open($event)" ng-class="{true: \'is-active\'}[isOpened]"></button><input type="text" class="ngapp-datepicker" ng-model="date" is-open="isOpened" datepicker-options="datepickerSettings" datepicker-popup="{{format}}" ng-focus="open($event)" ng-class="{true: \'is-active\'}[isOpened]" required></div>'
        };

        var timer = null;

        function appendInputs() {
            var $this = $(this);
            var value = this.value;

            var replaced = function () {
                var output;
                for (var prop in fields) {
                    output = value.replace(prop, fields[prop]);
                }
                return output;
            };

            clearTimeout(timer);

            timer = setTimeout(function () {
                previewField.html(replaced());
                $compile(previewField.contents())($scope);
            }, 300);
        };

        $el.on('keyup', appendInputs);
    };

    return {
        restrict: 'A',
        link: link
    }
};
var previewDirective=函数($compile){
var link=函数($scope、$el、$attrs){
var previewField=$('.preview');
变量字段={
日期:''
};
var定时器=null;
函数appendInputs(){
var$this=$(this);
var值=此值;
变量替换=函数(){
var输出;
for(字段中的var prop){
输出=值。替换(属性,字段[prop]);
}
返回输出;
};
清除超时(计时器);
定时器=设置超时(函数(){
html(替换为());
$compile(previewField.contents())($scope);
}, 300);
};
$el.on('keyup',追加输入);
};
返回{
限制:“A”,
链接:链接
}
};


如果你想重现这个错误,可以通过在textarea中键入单词“date”来追加字段,然后删除追加的字段值,从textarea中删除单词“date”,然后键入新的单词来刷新日期字段。

请提供一些代码。我添加了简单的演示,请参阅编辑的问题OK,我看过你的样品,我不确定你想达到什么目的。您认为表单什么时候应该无效?为什么?当ng表单中的字段无效时,表单应该无效。我发现angular会保存ng模型值,并将该值复制到附加到ng表单的字段中。换句话说,我对每个字段使用相同的ng模型值,但使用控制器的新实例。我认为问题在于如何用新的ng型号vlaue重新初始化控制器。请提供一些代码。我添加了简单的演示,请参阅编辑的问题。好的,我看过你的示例,我不确定你想要实现什么。您认为表单什么时候应该无效?为什么?当ng表单中的字段无效时,表单应该无效。我发现angular会保存ng模型值,并将该值复制到附加到ng表单的字段中。换句话说,我对每个字段使用相同的ng模型值,但使用控制器的新实例。我认为问题在于如何用新的ng型号vlaue重新初始化控制器。请提供一些代码。我添加了简单的演示,请参阅编辑的问题。好的,我看过你的示例,我不确定你想要实现什么。您认为表单什么时候应该无效?为什么?当ng表单中的字段无效时,表单应该无效。我发现angular会保存ng模型值,并将该值复制到附加到ng表单的字段中。换句话说,我对每个字段使用相同的ng模型值,但使用控制器的新实例。我认为问题在于如何用新的ng型号vlaue重新初始化控制器。