Javascript AngularJS:基本错误处理

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) {

我想通过显示/隐藏带有错误描述的success/error html元素来反映post请求状态。我有以下使用$http服务的控制器:

如果我点击错误回调,我希望有可能在这里抛出我的错误

我试过这个:

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;
    }