angularjs:扩展指令然后进行修改

时间:2018-02-13 20:08:15

标签: angularjs angularjs-directive servicenow

我在ServiceNow工作,我正在尝试扩展ootb指令,然后对几个函数进行一些修改。到目前为止,我已经找到了如何扩展指令:

function (spModelDirective){
    return angular.extend({}, spModelDirective[0], {
        templateUrl:'lbl_custom_template.xml'
    });
}

在这个指令中,有一个名为getNestedFields的函数,我想编辑它:

function getNestedFields(fields, containers) {
    if (!containers)
        return;
    for (var _container in containers) {
        var container = containers[_container];
        if (container.columns) {
            for (var _col in container.columns) {
                var col = container.columns[_col];
                for (var _field in col.fields) {
                    var field = col.fields[_field];
                    if (field.type == "container" && container.caption != "")
                        getNestedFields(fields, [field]);
                    else if (field.type == "checkbox_container")
                        getNestedFields(fields, field.containers);
                    else if (field.type == "field" || container.caption=="")
                        fields.push(formModel._fields[field.name]);
                }
            }
        }
    }
}

有人可以就正确的语法提供一些指导吗?

更多信息

我们的团队克隆了ootb widget-form,并尝试创建自定义布局。基本上,我们希望每个表单部分都是它自己的选项卡,就像后端表单而不是一个长表单,这就是ootb widget-form目前所做的。在sp-variable-layout模板的第一行中,它显示:

<fieldset ng-init="$last ? execItemScripts() : null" ng-show="isContainerVisible(container)" ng-repeat="container in containers">

容器中容器的ng-repeat将每个表单部分视为一个单独的容器(这是完美的),但它也将任何拆分视为一个单独的容器。例如,如果我的表单布局如下所示:

enter image description here

这将创建两个选项卡:一个包含开始和结束分割中的每个字段,另一个选项卡包含结束分割后的所有内容。创建的JSON对象如下所示:

{
        "_bootstrap_cells": 6,
        "_count": 2,
        "visible": true,
        "columns": [{
            "fields": [{
                "name": "type_of_account",
                "type": "field"
            }, {
                "name": "routing_transit_number",
                "type": "field"
            }]
        }, {
            "fields": [{
                "name": "type_of_payment",
                "type": "field"
            }, {
                "name": "check_digit",
                "type": "field"
            }]
        }],
        "caption": "Direct Deposit",
        "id": "b456b9d2137ac340177c36328144b0ef",
        "scope_name": "x_dnf_table"
    }, {
        "_bootstrap_cells": 12,
        "_count": 1,
        "visible": true,
        "columns": [{
            "fields": [{
                "name": "account_number",
                "type": "field"
            }, {
                "name": "account_title",
                "type": "field"
            }, {
                "name": "financial_institution_name",
                "type": "field"
            }]
        }],
        "caption": "",
        "id": "",
        "scope_name": "x_dnf_table"
    }

注意第一个&#34;部分&#34;有一个标题,但ServiceNow将拆分部分视为自己的单独部分,根本没有标题。

我想更改spModel指令以仅生成带有标题的容器作为自己的标签,如果容器没有标题,则将其附加到具有标题的上一个容器。

1 个答案:

答案 0 :(得分:0)

我认为您无法编辑此功能,因为它作为Servicenow上的文件托管。请参阅https://hi.service-now.com/scripts/app。$ sp / directive.spModel.js然后只需控制-f,以获取getNestedFields。

根据这个帖子; https://community.servicenow.com/thread/247907#1059129我相信spModal只是$ uibModal的包装。

您可以做的是在sp_angular_provider上制作自己的指令。