Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在angular js中编写服务器错误和成功的全局函数_Javascript_Angularjs_Server_Global - Fatal编程技术网

Javascript 如何在angular js中编写服务器错误和成功的全局函数

Javascript 如何在angular js中编写服务器错误和成功的全局函数,javascript,angularjs,server,global,Javascript,Angularjs,Server,Global,我有一个单独的功能,如,提交,更新,删除。所有功能 $http[method](url) .then(function(response) { $scope.successMessage = true; } , function(response) { $scope.errorMessageWrong=true; }); html <p ng-show="successMessage">Success</p> <p

我有一个单独的功能,如,提交,更新,删除。所有功能

$http[method](url)
   .then(function(response) {
           $scope.successMessage = true;
} , function(response) {
          $scope.errorMessageWrong=true;
});
html

<p ng-show="successMessage">Success</p>
<p ng-show="errorMessageWrong"> Something went wrong </p>

成功

出现了一些问题

用于单独的功能。我需要显示相应的消息。但是我不想重复更新、删除和提交的代码,甚至不想重复其他执行相同操作的页面的代码。 如何创建名为errorHandler的函数。这样我可以重复使用它

有人能帮我吗

您可以使用此服务并在各个控制器内共享$http也是一种服务。但是,如果您想向数据中添加更多内容,可以创建一个新服务并向其中注入$http

您可以为此使用服务,并在各种控制器内共享$http也是一种服务。但是,如果您想向数据中添加更多内容,可以创建一个新服务并向其中注入$http

如何创建名为
errorHandler
的函数。这样我可以重复使用它

通过返回已完成的数据响应和抛出已拒绝的错误响应,创建可链接的承诺

下面的示例函数将httpPromise作为参数,将成功或错误消息放在$scope上,并返回适合链接的承诺

function errorHandler(httpPromise) {
    var derivedPromise = httpPromise
       .then(function onFulfilled(response) {
                 $scope.successMessage = true;
                 //return response for chaining
                 return response;
            },
            function onRejected(errorResponse) {
                 $scope.errorMessageWrong = true;
                 //throw error to chain rejection
                 throw errorResponse;
            });
    //return derivedPromise for chaining
    return derivedResponse;
};
然后在客户端代码中:

var httpPromise = $http[method](url);

errorHandler(httpPromise).then( function (response) {
    //use data
});
客户端代码保存来自
$http
服务调用的httpPromise,使用
errorHandler
函数处理该承诺,并使用
errorHandler
函数返回的派生承诺

因为调用允诺的
then
方法会返回一个新的派生允诺,所以很容易创建一个允诺链。可以创建任意长度的链,并且由于一个承诺可以用另一个承诺解决(这将进一步推迟其解决),因此可以在链中的任何点暂停/推迟承诺的解决。这使得实现强大的API成为可能

如何创建名为
errorHandler
的函数。这样我可以重复使用它

通过返回已完成的数据响应和抛出已拒绝的错误响应,创建可链接的承诺

下面的示例函数将httpPromise作为参数,将成功或错误消息放在$scope上,并返回适合链接的承诺

function errorHandler(httpPromise) {
    var derivedPromise = httpPromise
       .then(function onFulfilled(response) {
                 $scope.successMessage = true;
                 //return response for chaining
                 return response;
            },
            function onRejected(errorResponse) {
                 $scope.errorMessageWrong = true;
                 //throw error to chain rejection
                 throw errorResponse;
            });
    //return derivedPromise for chaining
    return derivedResponse;
};
然后在客户端代码中:

var httpPromise = $http[method](url);

errorHandler(httpPromise).then( function (response) {
    //use data
});
客户端代码保存来自
$http
服务调用的httpPromise,使用
errorHandler
函数处理该承诺,并使用
errorHandler
函数返回的派生承诺


因为调用允诺的
then
方法会返回一个新的派生允诺,所以很容易创建一个允诺链。可以创建任意长度的链,并且由于一个承诺可以用另一个承诺解决(这将进一步推迟其解决),因此可以在链中的任何点暂停/推迟承诺的解决。这使得实现强大的API成为可能。

如果你想让它成为应用程序的全局API,那么你可以使用httpInterceptor

您必须创建一个拦截器服务,然后将拦截器添加到app.config()中的$httpProvider中

创建拦截器服务:

angular.module('app').factory('myInterceptorService', myInterceptorService);

function myInterceptorService($q){
   var errorMessage;
   var bShowHideWatchFlag;
   return{
       requestError:  requestError,
       responseError:  responseError,
       showFlag: bShowFlag,
       errorMessage: errorMessage
  };
  function requestError(rejection){
       errorMesasge = 'Request error';
       bShowHideWatchFlag = true;
       $q.reject(rejection);
       return;
  }
  function responseError(rejection){
       errorMesasge = 'Response error';
       bShowHideWatchFlag = true;
       $q.reject(rejection);
       return;
  }
}
要使用app config注册,请将$httpProvider添加到app.config

app.config([...,'$httpProvider'...){
    $httpProvider.interceptor.push('myInterceptorService');
}
在控制器中,必须将手表绑定到service showFlag:

  $scope.$watch( function () { return myInterceptorService.showFlag; },        
    function (oldval,newval) {
       if( oldval!=newval){
            $scope.errorMessage = myInterceptorService.errroMessage;
            $scope.showMessage  = newval;
        }
}, true);

如果你想让它成为你应用程序的全局,那么你可以使用httpInterceptor

您必须创建一个拦截器服务,然后将拦截器添加到app.config()中的$httpProvider中

创建拦截器服务:

angular.module('app').factory('myInterceptorService', myInterceptorService);

function myInterceptorService($q){
   var errorMessage;
   var bShowHideWatchFlag;
   return{
       requestError:  requestError,
       responseError:  responseError,
       showFlag: bShowFlag,
       errorMessage: errorMessage
  };
  function requestError(rejection){
       errorMesasge = 'Request error';
       bShowHideWatchFlag = true;
       $q.reject(rejection);
       return;
  }
  function responseError(rejection){
       errorMesasge = 'Response error';
       bShowHideWatchFlag = true;
       $q.reject(rejection);
       return;
  }
}
要使用app config注册,请将$httpProvider添加到app.config

app.config([...,'$httpProvider'...){
    $httpProvider.interceptor.push('myInterceptorService');
}
在控制器中,必须将手表绑定到service showFlag:

  $scope.$watch( function () { return myInterceptorService.showFlag; },        
    function (oldval,newval) {
       if( oldval!=newval){
            $scope.errorMessage = myInterceptorService.errroMessage;
            $scope.showMessage  = newval;
        }
}, true);

我在控制台中遇到此错误
错误:[$injector:undef]提供程序“myInterceptorService”必须从$get factory方法返回值。
我在控制台中遇到此错误
错误:[$injector:undef]提供程序“myInterceptorService”必须从$get factory方法返回值。