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 для форматирования даты.