UI在AngularJS

时间:2015-12-07 07:34:21

标签: javascript angularjs rest

请在下面找到angularjs工厂方法来调用http请求:

var HttpService = angular.module("HttpService",[]);

HttpService.factory("HttpServiceFactory",['$http', '$q', '$location', '$rootScope' ,function($http, $q, $location, $rootScope){
  return {
    getData: function(url, headers, bOnErrorRedirect, bShowInPageError, params){
      var headerParam = {'Accept':'application/json'};
      if(headers !== undefined || headers !== null){
        headerParam = $.extend(headerParam, headers);
      }

      var updatedParams = {'TimeStamp':new Date().getTime()};
      updatedParams = $.extend(params, updatedParams);

      var deferred = $q.defer();
      $http.get(url,{
        headers: headerParam,
          params : updatedParams
      }).success(function(successResponse){
          if(successResponse){          
            var responseJSON = angular.fromJson(successResponse);
            if(responseJSON && responseJSON.messages && responseJSON.messages.length){
              //Process Error
            }else{
              deferred.resolve(successResponse);
            }
          }else{
            deferred.resolve(successResponse);
          } 
      }).error(function(errorResponse , status){
        //Process Error
          console.error("status here:: "+status);           
      });
      return deferred.promise;
    }
  }      
}]); 

我在控制器中调用此方法,具有所有必需的依赖项,如下所示:

HttpServiceFactory.getData(args.sURL,null,false,true,args.oQueryParams).then(function(response){                        
                        scope.bDataLoading = false;                     
                        // process data                 
                    })
                    .catch(function(oResponse) {
                        scope.bDataLoading = false;
                        scope.bDisplayError = true;                     
                        // process error
                    }); 

这里一切正常。但问题是,当我在页面上进行多次http调用时,UI会冻结,并且在处理请求之前不允许进行交互。

例如,在页面上,我根据用户按输入框和日历控件选择的条件显示2 angular-ui-grid。在这种情况下,UI会冻结,直到显示两个网格或显示错误消息。

http服务电话会议期间,用户无法做任何事情,只需等待完成请求即可。

如何解决UI冻结问题?这是真正的异步行为吗?如果没有,为了实现正确的异步行为,我缺少什么?

0 个答案:

没有答案