Angular指令内的表单字段验证无法正常工作

时间:2013-10-30 12:20:46

标签: javascript html angularjs twitter-bootstrap

我正在使用最新版本的AngularJS,它是1.2rc3和Bootstrap用于样式,并且有这样的指令:

angular.module('form.field', [])

.directive('efield', function() {
    return {
        restrict: 'E',
        scope: {
            form: '@',
            fname: '@',
            label: '@'
        },
        template:   "<div data-ng-class=\"{{form}}.{{fname}}.$valid ? 'form-group' : 'form-group has-error'\">" +
                        "<label class='control-label' for='{{fname}}'>{{label}}</label>" +
                        "<input type='text' class='form-control' name='{{fname}}' data-ng-required='false' data-ng-model='Form.test'>" +
                    "</div>"

    }
});

html代码段如下所示:

<form name="form" novalidate="novalidate">
    <efield form="form" fname="test" label="field"></efield>
</form>

我正在使用指令来包装字段html和angular的验证指令以减少样板代码。问题是即使在输入字段上设置了data-ng-required ='false',父div也会获得'form-group has error'类而不仅仅是'form-group'。我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

由于您在指令中创建了隔离范围,因此遇到了问题。有几种方法可以解决它。以下是删除隔离范围并使用template:function(elem,attrs)代替

的内容
.directive('efield', function () {
    return {
        restrict: 'E',

        template: function (elem, attrs) {

            return "<div data-ng-class=\"" + attrs.form + "." + attrs.fname + ".$valid ? 'form-group' : 'form-group has-error'\">" +
                "<label class='control-label' for='" + attrs.fname + "'>" + attrs.label + "</label>" +
                "<input type='text' class='form-control' name='" + attrs.fname + "' data-ng-required='false' data-ng-model='Form.test'>" +
                "</div>"

        }
    });

现在范围将是父范围的范围

答案 1 :(得分:0)