Обновить данные после отображения

В моем приложении 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, чтобы обновить сообщение на сервере, но используйте просмотренный экземпляр, чтобы определить, какие сообщения отображать.

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