在对象

时间:2018-08-29 08:32:24

标签: javascript html angularjs

有一个关于Angularjs的问题,它是ng-repeat / ng-click的工作方式。

因此,在我正在使用的这个系统上,有很多代码重用于数据表,并且我正在尝试制作一个通用的模板/服务来对此进行补救。现在,我遇到了一个问题,就是我们有多个按钮,它们在被单击时带有各自的函数调用。

到目前为止,我已经完成了以下设置: 我的列对象定义为:

var columns = [
        {
            identifier: "id",
            type: "text"
        },
        {
            identifier: "type",
            type: "text"
        },
        {
            identifier: "label",
            type: "text"
        },
        {
            identifier: "actions",
            type: "button",
            multi: true,
            content: [
                {
                    icon: "fa-globe",
                    events: {
                        click: $scope.openMapModal
                    }
                },
                {
                    icon: "fa-list",
                    events: {
                        click: $scope.openGroupModal
                    }
                }
            ]
        }
    ];

我的HTML如下:

<tr ng-repeat="row in table.data" ng-model-instant>
    <td ng-repeat="column in table.columns" ng-if="column.type === 'text'">
        {{TableService.getByString(row, column.identifier)}}
    </td>

    <td ng-repeat="column in table.columns" ng-if="column.type === 'button' && column.multi">
        <a ng-repeat="button in column.content" class="btn fa {{button.icon}}" ng-click="button.events.click(row)"></a>
    </td>
</tr>

为了完整起见,我的TableService.getByString和一个小的表数据集: (请注意,上面定义的列是由函数设置到表对象中的,而我没有在对象中包括它。)

var table = {
    data: [
        {
            id: 0,
            label: "foo",
            type: "bar"
        },
        {
            id: 1,
            label: "one",
            type: "bar"
        },
        {
            id: 2,
            label: "foo",
            type: "two"
        }
    ]
}

function getKeyObj(obj, key) {
    var retVal = {
        "key": key,
        "obj": obj
    };

    if (retVal.key.indexOf('.') > -1) {
        var keyParts = retVal.key.split('.');
        retVal.key = keyParts.pop();
        while (keyParts.length && (obj = obj[keyParts.shift()])) ;
        retVal.obj = obj;
    }

    return retVal;
}

function getByString(obj, key) {
    var ret = getKeyObj(obj, key);
    return ret.obj[ret.key];
}

现在我遇到的问题是,每当我单击按钮时,ng-click的函数都不会被调用。

我也尝试通过在我的列对象中将功能设置为字符串来尝试它,但是它也不起作用。

我是朝着正确的方向前进吗?还是我需要重新思考我的概括?如果是,那还有什么选择?

1 个答案:

答案 0 :(得分:0)

您确定在定义columns数组时是否已定义$ scope.openMapModal吗?可能是您将undefined分配给click属性,而不是对该函数的引用吗?