Javascript AngularJS:基本错误处理
我想通过显示/隐藏带有错误描述的success/error html元素来反映post请求状态。我有以下使用$http服务的控制器: 如果我点击错误回调,我希望有可能在这里抛出我的错误 我试过这个:Javascript AngularJS:基本错误处理,javascript,angularjs,ajax,error-handling,Javascript,Angularjs,Ajax,Error Handling,我想通过显示/隐藏带有错误描述的success/error html元素来反映post请求状态。我有以下使用$http服务的控制器: 如果我点击错误回调,我希望有可能在这里抛出我的错误 我试过这个: var statusBar = angular.element('postStatusBar'); //... .success(function () { statusBar.setClass("alert-success") }) .error(function (error) {
var statusBar = angular.element('postStatusBar');
//...
.success(function () {
statusBar.setClass("alert-success")
})
.error(function (error) {
statusBar.setClass("alert-danger");
statusBar.setParameter("text", error);
});
但它显然不起作用,看起来像反模式。做这件事的最佳解决方案是什么?首先必须使用$scope.statusBar
并且还添加了除setClass之外的其他类。首先,您必须使用$scope.statusBar
如果警报组件超出控制器范围,则还需要添加除setClass之外的Class,使警报成为指令,并使用广播通知和更新属性,如可见性 否则,您可以从控制器绑定属性,如:
<div ng-controller="AwesomeController as AwesomeCtrl">
<div class="alert" ng-show="AwesomeCtrl.show.error">....
<div class="alert" ng-show="AwesomeCtrl.show.success">....
<div class="alert" ng-class="{ 'succes' : AwesomeCtrl.show.success }">....
如果警报组件超出控制器范围,则需要将警报设置为指令,并使用广播通知和更新属性,如可见性 否则,您可以从控制器绑定属性,如:
<div ng-controller="AwesomeController as AwesomeCtrl">
<div class="alert" ng-show="AwesomeCtrl.show.error">....
<div class="alert" ng-show="AwesomeCtrl.show.success">....
<div class="alert" ng-class="{ 'succes' : AwesomeCtrl.show.success }">....
为什么不通过在响应中设置一些范围变量来进行ng show?为什么不通过在响应中设置一些范围变量来进行ng show
angular
.module('app')
.controller('AwesomeController', controller);
controller.$inject = ['$http'];
function controller($http) {
var vm = this;
vm.corporateTransport = {};
vm.show = {
error = false;
success = false;
}
vm.oneCoolMethod = addCorporateTransport;
// test
addCorporateTransport();
function addCorporateTransport() {
$http.post('/post_corporate_transport', vm.corporateTransport)
.success(onTransportSuccess)
.error(onTransportError);
};
function onTransportSuccess(result) {
toggleAlert('success');
}
function onTransportError(result) {
toggleAlert('error');
}
function toggleAlert(level) {
angular.forEach(vm.show, function(value, key) {
vm.show[key] = false;
});
vm.show[level] = true;
}