Вставьте директиву в столбец таблицы AngularJS - PullRequest
0 голосов
/ 04 сентября 2018

Существует компонент таблицы, который берет имена столбцов и строк с данными, которые я хочу отобразить в таблице. Но не всегда данные представляют собой простой текст. Иногда я хочу добавить свою собственную директиву.

Например, есть контроллер с собственным шаблоном, в который я хочу добавить свой собственный компонент таблицы. В контроллере я устанавливаю данные, которые хочу передать в таблицу:

ctrl.tableData = [
  { name: 'Alex', age: '34', mobile: '<my-directive ng-model="ctrl.mobile">' }
];

Затем в шаблоне я отправляю эти данные в таблицу:

<my-table-component data="ctrl.tableData"></my-table-component>

Ну, в компоненте my-table-component рисуется таблица:

<table>
  <tr ng-repeat="row in ctrl.data">
    <td ng-repeat="column in ctrl.columns">{{ row[column] }}</td>
  </tr>
</table>

При такой реализации таблицы я не могу вставить директиву, поскольку она будет вставлена ​​просто текстом. Для этого я создал дополнительную директиву, которая компилирует директивы. Пусть его имя будет my-table-directive. Это делает следующее:

function link (scope, element, attrs) {
  const columnElem = angular.element(element);

  let columnChild = attrs.columnValue;

  if (attrs.columnValue.startsWith('<')) {
    columnChild = $compile(columnChild)(scope);
  }

  columnElem.append(columnChild);
}

И шаблон моей таблицы немного изменился:

<td ng-repeat="column in ctrl.columns">
    column-value={{row[column]}}
    my-table-directive></td>

Кажется, все в порядке. Но проблема в том, что директива вообще не компилируется с ожидаемой областью действия :) Естественно, я хочу изменить свойство mobile в моем самом верхнем эскизе, где я установил ctrl.tableData. А с текущей реализацией директивы ng-model, my-directive запишет данные в свойство mobile моей области видимости <td> в таблице.

Может быть, мое решение не совсем верно? Не могли бы вы как-то организовать вставку директив в таблицу компонентов другим способом? Задача кажется популярной, но с Google ничего не случилось. Помогите мне, пожалуйста:)

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