显示后更新数据

时间:2016-01-11 16:23:37

标签: angularjs angularjs-scope angularjs-bindings

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

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

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

我有一个指令来显示这些消息,这些消息采用数组和页面ID,仅显示当前页面尚未查看的消息。到现在为止还挺好。

现在,我想在消息显示一次后将viewed设置为true。如果我在显示它时立即执行它,那么数据绑定将立即将其从视图中删除。如果我在范围$destroy上执行此操作,只要用户导航到另一个角度页面,它就会起作用。如果用户刷新或关闭标签页,或导航到外部网址,则viewed会保留false。我无法使用onbeforeunload,因为我需要执行AJAX请求来更新服务器上的消息。而且我不想使用bind一次,因为这会阻止显示任何新消息。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

不是对viewed使用布尔值,而是将其设为整数,一旦有资格显示,它就会递增。模板应仅在viewed === 1

时呈现