为标记和属性组合创建自定义角度指令?

时间:2015-07-29 23:04:25

标签: javascript angularjs

好的,这是交易。

我为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属性。

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

我能以某种方式制作require: 'ngModel'选项吗?

1 个答案:

答案 0 :(得分:0)

菲尔关于使用?ngModel修复它的评论。一切正常。