Grails и Angular: тэг плагина GSP внутри цикла ng-repeat

Я работаю в проекте Grails, который использует Angular.

Я использую плагин под названием PrettyPrint, чтобы иметь "твиттероподобное" время (т.е. форматировать даты как "моменты назад").

Я хочу использовать плагин внутри цикла ng-repeat.

<tr ng-repeat="notification in notifications">
...
    <td><prettytime:display date="${notification.date}" /></td>
...
</tr>

В приведенном выше коде выдается ошибка Cannot get property 'date' on null object, (он не распознает элемент уведомления из угловой петли).

Если я использую {{notification.date}} это показывает дату.

Как я могу иметь дело как с плагином, так и с Angular?

2 ответа

Решение

Попробуйте этот код в своем gsp (предположим, что вы передали список уведомлений представлению через модель):

<%
  def notifications = notificationsFromModel.collect {
    [date: prettyTime.display(it.date), message: it.message]
  }
%>

<span ng-init="notifications = <%= notifications as JSON %>"></span>

<tr ng-repeat="notification in notifications">
  <td>{{ notification.date }}</td>
  <td>{{ notification.message }}</td>
</tr>

Проще говоря, вы не можете.

Один основан на браузере, а другой - на сервере. Вы не можете использовать плагин, который основан на сервере, и вызывать его из JavaScript в браузере.

Продумайте это до конца. ng-repeat цикл выполняется браузером. Когда это происходит, сервер уже завершил обработку GSP и отправил его в браузер. Тогда нет возможности для вызова плагина.

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

Другие вопросы по тегам