【问题标题】:Creating a custom angular directive for tag and attribute combination?为标签和属性组合创建自定义角度指令?
【发布时间】:2015-07-29 23:04:24
【问题描述】:

好的,这就是交易。

我为input 标签创建了一个自定义指令,并为input[type=ip] 提供了自定义验证:

.directive('input', function($q, $timeout) {
    return {
        restrict: "E",
        require: 'ngModel',
        link: function(scope, elm, attrs, ctrl) {
            if (attrs.type !== 'ip') return;
            var reg = new RegExp("^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$");
            ctrl.$asyncValidators.ip = function(modelValue, viewValue) {
                if (ctrl.$isEmpty(modelValue)) {
                    return $q.when();
                }

                var def = $q.defer();
                if(reg.exec(modelValue)) {
                    def.resolve();
                } else {
                    def.reject();
                }

                return def.promise;
            };
        }
    };
});

这非常有效,我计划在未来使用它来创建自定义验证。

我遇到的问题是input[type=file]。在视图中,它没有ngModel 属性。 Angular 不喜欢这样。从技术上讲,它是一个input 标记,因此它解释了input 指令……但这需要ngModel 属性。

我该如何解决这个问题?如何基于type 属性创建不会相互破坏的自定义input 指令?

我可以以某种方式选择require: 'ngModel' 吗?

【问题讨论】:

  • @Phil 在这种情况下ctrl 不会为空吗?并且不会有执行验证的控制器,因此不能附加验证器?
  • 请注意,使用异步验证器的原因是什么?此验证是人工异步进行的
  • 是的,但这不是您想要的吗?

标签: javascript angularjs


【解决方案1】:

Phil 使用?ngModel 的评论修复了它。一切正常。

【讨论】:

    猜你喜欢
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多