Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在AngularJS中使用指令时如何使窗体无效_Javascript_Angularjs_Validation_Angularjs Directive_Single Page Application - Fatal编程技术网

Javascript 在AngularJS中使用指令时如何使窗体无效

Javascript 在AngularJS中使用指令时如何使窗体无效,javascript,angularjs,validation,angularjs-directive,single-page-application,Javascript,Angularjs,Validation,Angularjs Directive,Single Page Application,我正在处理一个SPA,这个应用程序中的一个表单使用了一个输入屏蔽文本框,该文本框使用来自的第三方库实现 我创建了一个指令来设置IP地址的掩码 angular .module('app').directive('ipMask', [ function () { return { restrict: 'A', require: '?ngModel', link: function (scope, elem

我正在处理一个SPA,这个应用程序中的一个表单使用了一个输入屏蔽文本框,该文本框使用来自的第三方库实现

我创建了一个指令来设置IP地址的掩码

angular
.module('app').directive('ipMask', [
    function () {
        return {
            restrict: 'A',
            require: '?ngModel',
            link: function (scope, element, attrs, ngModel) {        
                    element.mask('0ZZ.0ZZ.0ZZ.0ZZ', {translation: {'Z': {pattern: /[0-9]/, optional: true}}});
                    element.mask('099.099.099.099');

                    scope.$watch(attrs.ngModel, function (newValue, oldValue) {
                        //????????
                    });
            }
        };
    }
]);
我的表单代码看起来像

    <div ng-controller="nodesListCtrl as vm">
        <form role="form" name="frmNode">

            <div class="form-group">
                <label>Node IP :</label>
                <input type="text" data-ip-mask ng-model="vm.myIp" name="CtrIp" class="input-sm form-control" placeholder="..." >
            </div>
        </form>
    </div>

节点IP:

如果IP地址错误,我想使表单无效。i、 e.我希望在窗体和控件上都有.ng无效的类,直到它仍然无效为止。有什么建议吗

您不需要使用
$watch
。只需添加一个解析器和/或格式化程序。视图更改时调用解析器,模型更改时调用格式化程序。(此链接可以告诉您有关这些的更多信息,以及ngModelController:上提供的其他内容)。下面是一个例子:

link: function (scope, element, attrs, ngModel) {        
  element.mask('0ZZ.0ZZ.0ZZ.0ZZ', {translation: {'Z': {pattern: /[0-9]/, optional: true}}});
  element.mask('099.099.099.099');

  ngModel.$parsers.unshift(function(value) {
    var valid = isValid(value); // made up - use whatever validation technique based on that library
    ngModel.$setValidity('ip', valid);
    return valid;
  });

  ngModel.$formatters.unshift(function(value) {
    var valid = isValid(value);
    ngModel.$setValidity('ip', valid);
    return valid ? value : undefined;
  });
}

谢谢你。虽然我认为这个库很烂,但它没有任何功能来判断它是否有效。但是你的答案是正确的。我正试图弄明白这一点。