Обновить данные после отображения
В моем приложении Angular у меня есть массив сообщений, каждое из которых имеет массив страниц, на которых оно должно отображаться:
[{
message: 'Foo',
showOnPage: [1, 3],
viewed: false
},{
message: 'Bar',
showOnPage: [2, 3],
viewed: true
}]
Это выбирается с сервера, когда приложение загружается, а затем синхронизируется с push-событиями с сервера. Не перезагружается при навигации между страницами.
У меня есть директива для отображения этих сообщений, которая принимает массив и идентификатор страницы и показывает только те сообщения для текущей страницы, которые еще не просмотрены. Все идет нормально.
Теперь я хочу установить viewed
в true
после того, как сообщение было показано один раз. Если я сделаю это, как только оно отобразится, привязка данных немедленно удалит его из поля зрения. Если я сделаю это по объему $destroy
это работает, пока пользователь переходит на другую угловую страницу. Если пользователь обновляет или закрывает вкладку или переходит на внешний URL-адрес, viewed
остается false
, Я не могу использовать onbeforeunload
потому что мне нужно сделать запрос AJAX для обновления сообщения на сервере. И я не хочу использовать связывание один раз, так как это предотвратит отображение любых новых сообщений.
Обновление свойства после его показа кажется довольно разумным требованием, но я застрял в идеях о том, как его реализовать. Какие-либо предложения?
2 ответа
Вместо того, чтобы использовать логическое значение для viewed
, сделайте его целым числом, которое увеличивается, как только оно будет отображаться. Шаблон должен отображать его только тогда, когда viewed
=== 1
Сделайте копию массива, когда он вернется с сервера. Когда элементы просматриваются, обновите просмотрено = true в исходном массиве, сделайте запрос AJAX, чтобы обновить сообщение на сервере, но используйте просмотренный экземпляр, чтобы определить, какие сообщения отображать.