У вас есть вопрос об 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];
}
Теперь проблема, с которой я сталкиваюсь, заключается в том, что мои функции не вызываются в моих нг-кликах, когда я нажимаю на кнопки.
Я также пробовал это с настройкой функции как строки в моем объекте столбца, но она тоже не работала.
Я иду в правильном направлении с этим или мне нужно переосмыслить свое обобщение, и если да, то какая альтернатива есть?