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方法返回值。