在 AngularJS 中检查自定义指令的输入

Checking Input to a Custom Directive in AngularJS

我有一个非常大的表格,在编辑 HTML 时变得难以阅读和遵循。我决定尝试充分利用 AngularJS 并使用自定义指令来压缩重复文本的数量。这是我写的原始指令:

app.directive("formField", function () {
    return {
        restrict: 'E',
        scope: {
            fieldData: '=field',
            fieldName: '=name',
            fieldType: '=type'
        },
        template: <SOME HTML>
    }
});

我会使用此指令将表单字段添加到我的页面,如下所示:

<form-field field="some_data" type="text" name="other_data"></form-field>

我使用 type 变量来区分日期时间输入、文本输入、数字等,因为它们在我的代码中仅通过一个关键字(通过输入的 type 属性)进行区分。 )

但是现在我遇到了包含复选框的需要,由于我的布局,这需要截然不同的代码才能正确构建。基于此,当类型 "checkbox" 传递到指令中时,我想 return 一个不同的模板值。我试过这种东西的变体:

app.directive("formField", function () {
    return {
        restrict: 'E',
        scope: {
            fieldData: '=field',
            fieldName: '=name',
            fieldType: '=type'
        },
        template: function () {
            if(fieldType == 'checkbox') {
                return <CHECKBOX HTML>;
            } else {
                return <REGULAR FIELD HTML>;
        }
    }
});

这行不通。谁能告诉我如何检查类型字段的值,以便我可以在指令的 returned 对象中比较它?谢谢。

在模板中,您可以检查元素的属性。

您的模板应如下所示:

template: function (element, attrs) {
        if(attrs.type == 'checkbox') {
            return <CHECKBOX HTML>;
        } else {
            return <REGULAR FIELD HTML>;
        }
    }

fieldData、fieldName 和 fieldType 的隔离范围属性定义在模板 return 字符串中可用(使用表达式),但它们在模板的逻辑中不可用。例如:

template: '<p>{{ fieldData }}</p>'