Javascript 在Angular指令中编译后,将从输入中删除无效输入

Javascript 在Angular指令中编译后,将从输入中删除无效输入,javascript,angularjs,validation,angularjs-directive,Javascript,Angularjs,Validation,Angularjs Directive,我有一个指令,根据模型中的验证列表向输入添加自定义和本机验证。验证值可以根据表单中其他地方的输入进行更改(例如,结束日期不应早于开始日期) 但是,如果其中一个手表调用setValidations,它只在第一次编译元素。对于startdate示例,这意味着对于输入的第一个日期,enddate输入可以很好地编译,但是当我更改输入时,什么都不会发生(在调用compile之前记录属性确实会显示更新的值)。原始指令中的compile方法会在模型更改时重新编译,但会删除所有无效输入 编辑:已添加 看起来输入

我有一个指令,根据模型中的验证列表向输入添加自定义和本机验证。验证值可以根据表单中其他地方的输入进行更改(例如,结束日期不应早于开始日期)

但是,如果其中一个手表调用setValidations,它只在第一次编译元素。对于startdate示例,这意味着对于输入的第一个日期,enddate输入可以很好地编译,但是当我更改输入时,什么都不会发生(在调用compile之前记录属性确实会显示更新的值)。原始指令中的compile方法会在模型更改时重新编译,但会删除所有无效输入

编辑:已添加

看起来输入上的去抖动与此有关。不幸的是,我有一堆代码运行在我的ng更改上,我需要去盎司

edit2:将allowInvalid:true添加到ng模型选项时,不再删除值。我对无效值不太感兴趣,所以我不想使用它

function questionValidations($compile, $parse) {
    var directive = {
        restrict: 'A',
        link: linker
    }

    return directive;

    function linker(scope, elem, attrs) {
        var validations = $parse(attrs.questionValidations)(scope);
        setValidations();

        function setValidations() {
            if (!validations || validations.length < 1) {
                return;
            }

            // Logic that adds/removes attributes following the parsed validations above                                           
            // Additionally a service is called to determine if 
            // the validation value should be watched. 
            // Watch calls setValidations.

            // Compile if there are new or removed attributes
            if (new || removed) {
                var newElem = angular.element(elem[0]);
                elem.replaceWith(newElem);
                $compile(newElem)(scope);
            }
        }
    }
}
         $compile(elem)(scope,
            function(clone) {
                elem.after(clone);
                elem.remove();
          });