我想用angularjs在我的网站上实现观看次数的功能。
该功能与stackoverflow问题视图计数器相同:它是持久的。
我在考虑拦截http请求,异步更新后端并在本地更新数据(cookie或localStorage)。
有什么办法吗?
提前致谢
答案 0 :(得分:2)
使用您正在使用的任何路由系统,您只需挂钩路由更改事件并使用路由名称向服务器发送请求,以便它可以更新计数器。这是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;
});