Функция углового вызова в ng-click, определенная в объекте - PullRequest
0 голосов
/ 29 августа 2018

У вас есть вопрос об 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];
}

Теперь проблема, с которой я сталкиваюсь, заключается в том, что мои функции не вызываются в моих нг-кликах, когда я нажимаю на кнопки.

Я также пробовал это с настройкой функции как строки в моем объекте столбца, но она тоже не работала.

Я иду в правильном направлении с этим или мне нужно переосмыслить свое обобщение, и если да, то какая альтернатива есть?

1 Ответ

0 голосов
/ 29 августа 2018

Вы уверены, что $ scope.openMapModal определен во время определения массива столбцов? Может быть, вы назначаете неопределенное свойство click вместо ссылки на функцию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...