Angular.js从服务向控制器$ scope传递错误消息

克劳迪

我正在执行http.post请求,并且尝试显示错误消息以防万一出现问题。我正在处理服务中的错误消息,然后将其传递给控制器​​并在$ scope中进行设置。我没有收到任何JS错误...。为什么会有这样的想法?

services.js

angular.module('app.services', [])
.factory('Model', function($http) {

    Model.save = function(data) {
        return $http.post(url, data)
            .success(function(data, status, headers) {
                console.log(data);
                console.log(status);
                console.log(headers);
            })
            .error(function(data, status, headers) {
                var requestError = 'Something went wrong! :(';
                return requestError; //pass error message back to $scope
            });
    }

return Model;

});

controllers.js

.controller('Ctrl', function($scope, Model) {   
//form object data
$scope.formInfo = {};

//form save 
$scope.saveData = function() {
    //console.log($scope.formInfo);

    $scope.requestError = '';

    //form data
    var data = {name: $scope.formInfo.name, description: $scope.formInfo.description, token: "/api/v1/tokens/1/"};

    Model.save(data).then(function(requestError) {
        alert(requestError);
        if (requestError === '') {
            //do nothing for now
        }
        else {
            $scope.requestError = requestError;
        }
    });

};

})

安静的薄荷

一个承诺有两个最终状态:已解决(成功)或被拒绝(错误)。

在控制器中,then()如果要访问两个状态,则该函数需要两个不同的处理程序。第一个处理程序仅从服务接收已解决的(成功)承诺。要还处理服务中被拒绝(错误)的承诺,您将需要以下内容:

Model.save(data).then(function(success) { ... }, function(error) { ... });

如果您仅出于某种原因关心错误,请使用以下两种方法之一(等效):

Model.save(data).then(null, function(error) { ... });
Model.save(data).catch(function(error) { ... });

在您的服务中,请确保在发生错误的情况下实际上已将拒绝(错误)的承诺返回给控制器。您可以使用return $q.reject(requestError)而不是来做到这一点return requestError


重要说明:由于您正在使用$http,因此在HTTP错误的情况下,这将已经拒绝了Promise。如果您不处理服务中的被拒绝(错误)承诺,则它们将自动传递给控制器​​的错误处理程序。您可能只想让我们$http的拒绝通过,而在服务中没有错误处理程序。您只需删除.error()服务即可做到这一点这允许HTTP错误直接由控制器处理。(根据您要执行的错误处理类型,这可能不希望如此)。

我倾向于在HTTP服务中遵循的基本模式如下所示,该模式要么返回带有已下载数据的已解决承诺,要么返回$http直接来自控制器的拒绝承诺(错误)

return $http.get(config).then(function(success) { return success.data });

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Angular.js将错误消息从服务传递到控制器$ scope

来自分类Dev

Angular:从$ routeProvider.when向控制器传递参数

来自分类Dev

Angular JS-将Firebase数据从服务传递到控制器

来自分类Dev

将Browserify与Angular JS一起使用--将服务传递到控制器

来自分类Dev

将Browserify与Angular JS一起使用--将服务传递到控制器

来自分类Dev

Angular JS服务和不同文件中的控制器导致错误

来自分类Dev

将参数从控制器传递到Angular中的服务

来自分类Dev

Angular共享服务向控制器返回null

来自分类Dev

Angular.js:测试控制器功能,更改$ scope

来自分类Dev

在Angular.js中的控制器之间传递对象

来自分类Dev

Angular JS缺少必需的控制器错误:找不到指令所需的控制器“ ngModel”

来自分类Dev

Angular JS控制器抛出错误

来自分类Dev

Angular Js基本控制器返回错误

来自分类Dev

Angular JS控制器抛出错误

来自分类Dev

错误“控制器名称”不是angular js中的函数?

来自分类Dev

angular.js中的服务和控制器

来自分类Dev

控制器在Angular JS中加载时调用服务

来自分类Dev

在控制器中模拟angular js服务调用

来自分类Dev

Angular服务无法正确更新我的控制器中的$ scope.data

来自分类Dev

将数据从Angular服务传递到控制器和刷新视图

来自分类Dev

Angular 控制器向/从 Nodejs 服务器发送和接收数据

来自分类Dev

将Angular服务注入控制器会导致$ injector:unpr错误(使用AngularBooter)

来自分类Dev

将服务注入控制器时,Angular获取未知的提供程序错误

来自分类Dev

使用angular-file-upload从服务向控制器发送中间数据

来自分类Dev

Jasmine / Angular.js $ scope在加载控制器上未定义

来自分类Dev

$ scope是否自动注入到Angular js中的控制器?

来自分类Dev

无法从Angular JS的控制器函数中访问$ scope变量

来自分类Dev

Magento向控制器添加错误消息

来自分类Dev

Magento向控制器添加错误消息

Related 相关文章

  1. 1

    Angular.js将错误消息从服务传递到控制器$ scope

  2. 2

    Angular:从$ routeProvider.when向控制器传递参数

  3. 3

    Angular JS-将Firebase数据从服务传递到控制器

  4. 4

    将Browserify与Angular JS一起使用--将服务传递到控制器

  5. 5

    将Browserify与Angular JS一起使用--将服务传递到控制器

  6. 6

    Angular JS服务和不同文件中的控制器导致错误

  7. 7

    将参数从控制器传递到Angular中的服务

  8. 8

    Angular共享服务向控制器返回null

  9. 9

    Angular.js:测试控制器功能,更改$ scope

  10. 10

    在Angular.js中的控制器之间传递对象

  11. 11

    Angular JS缺少必需的控制器错误:找不到指令所需的控制器“ ngModel”

  12. 12

    Angular JS控制器抛出错误

  13. 13

    Angular Js基本控制器返回错误

  14. 14

    Angular JS控制器抛出错误

  15. 15

    错误“控制器名称”不是angular js中的函数?

  16. 16

    angular.js中的服务和控制器

  17. 17

    控制器在Angular JS中加载时调用服务

  18. 18

    在控制器中模拟angular js服务调用

  19. 19

    Angular服务无法正确更新我的控制器中的$ scope.data

  20. 20

    将数据从Angular服务传递到控制器和刷新视图

  21. 21

    Angular 控制器向/从 Nodejs 服务器发送和接收数据

  22. 22

    将Angular服务注入控制器会导致$ injector:unpr错误(使用AngularBooter)

  23. 23

    将服务注入控制器时,Angular获取未知的提供程序错误

  24. 24

    使用angular-file-upload从服务向控制器发送中间数据

  25. 25

    Jasmine / Angular.js $ scope在加载控制器上未定义

  26. 26

    $ scope是否自动注入到Angular js中的控制器?

  27. 27

    无法从Angular JS的控制器函数中访问$ scope变量

  28. 28

    Magento向控制器添加错误消息

  29. 29

    Magento向控制器添加错误消息

热门标签

归档