Angularjs计算页面视图的数量并显示它

时间:2015-04-05 00:42:08

标签: javascript angularjs

我想用angularjs在我的网站上实现观看次数的功能。

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

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

有什么办法吗?

提前致谢

2 个答案:

答案 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;     

});