2015-04-05 101 views
0

我想用angularjs实现我的网站中的浏览次数功能。Angularjs计数页面浏览量并显示它

该功能与stackoverflow问题视图计数器相同:它是持久的。

我想拦截http请求,异步更新后端并在本地更新数据(cookie或localStorage)。

有没有办法做到这一点?

在此先感谢

回答

1

无论您使用的是什么路由系统,您都可以挂接到路由更改事件并使用路由名称向服务器发送请求,以便它可以更新计数器。这是一个使用ui-router的例子。

.run(function($rootScope, PageViews) { 
    $rootScope.$on('$stateChangeStart', function(e, toState) { 
    // add a view 
    PageViews.add(toState.name); 
    // request the total views for this state from the server 
    PageViews.get(toState.name).then(function(resp) { 
     // add 1 to the result if you want to count the current view 
     $rootScope.pageViews = resp.data + 1; 
     // let the server know another user has viewed this state 
     PageViews.add(toState.name); 
    }); 
    }); 
}) 

您可以在获取合并/让你每次触发它的时候,你得到的页面访问量,也增加了总数在一个请求是否适合你更好的添加请求。

为了演示的目的,PageViews服务正在保存到localStorage而不是您想要用于实际应用程序的服务器。 http://jsbin.com/fehoxifabo/1/

+1

这就是我一直在寻找的!谢谢 –

0

我想你应该只是有后端印刷上的响应浏览量数字,而且这个数字应该通过更新数据库中增加每次。如果你坚持使用异步API调用来做到这一点,这里有一个解决方法:

可以截获每个锚点击让链接带你去任何地方(一个jQuery例子)之前进行的异步调用:

$(window).click(function(event){ 

    if(event.target.is('a[href]')){ 

    yourAsyncFunction(); 
    window.location.href = $(event.target).attr('href'); // Use this if you want to 
                 // actually go where the anchor 
                 // takes you 
    } 

    return false;  

}); 
相关问题