1

在我的 Angular 应用程序中,我有一个消息数组,每个消息都有一个页面数组,应该在这些页面上显示它:

[{
    message: 'Foo',
    showOnPage: [1, 3],
    viewed: false
},{
    message: 'Bar',
    showOnPage: [2, 3],
    viewed: true
}]

这是在应用程序加载时从服务器获取的,然后与来自服务器的推送事件保持同步。在页面之间导航时不会重新加载。

我有一个指令来显示这些消息,它采用数组和页面 ID,并且只显示当前页面尚未查看的消息。到目前为止,一切都很好。

现在我想设置viewedtrue一旦消息显示一次。如果我一显示就这样做,那么数据绑定将立即将其从视图中删除。如果我在范围内$destroy这样做,只要用户导航到另一个角度页面,它就可以工作。如果用户刷新或关闭选项卡,或导航到外部 URL,则viewed保持false. 我不能使用onbeforeunload,因为我需要执行 AJAX 请求来更新服务器上的消息。而且我不想使用一次绑定,因为这会阻止显示任何新消息。

在显示后更新属性似乎是一个相当合理的要求,但我对如何实现它的想法感到困惑。有什么建议么?

4

2 回答 2

1

从服务器返回时复制数组。查看项目时,在原始数组中更新viewed = true,执行AJAX 请求以更新服务器上的消息,但在副本上使用viewed 来确定要显示哪些消息。

于 2016-01-11T16:32:39.027 回答
1

与其使用布尔值viewed,不如将其设为整数,一旦符合显示条件就会递增。模板应该只在viewed=== 1时渲染它

于 2016-01-11T19:55:10.870 回答