AngularJS - 从服务到控制器的错误

时间:2016-09-16 10:49:25

标签: javascript angularjs

Service.js

    myService.serviceName = function (userId) {
            return $http({
                method: 'POST',
                url: '/someUrl'
            }).then(function successCallback(response) {
                return response.data;
            }, function errorCallback(response) {
                console.log('Service errorCallback');
                console.log(response);
            });
    };

Controller.js

myService.ControllerName(data.id)
        .then(function successCallback(data) {
            //do processing here
        }, function errorCallback(response) {
            toaster.pop({
                type: 'error',
                title: 'Display Error Message!'
            });
        });

在投放使用时,我们会在控制台viz -1-2中收到错误状态代码,并根据该代码向用户显示自定义错误消息。

  • 如何将错误(消息/代码)从服务传递到控制器?

2 个答案:

答案 0 :(得分:1)

我想到的第一件事就是接受来自Controller的回调。

myService.serviceName = function (userId) {
    return $http({
        method: 'POST',
        url: '/someUrl'
    })
};

在你的控制器中:

myService.serviceName(123).then(function(response) {
    // Do the processing.
}, function(error) {
    // Check the error and change the UI accordingly. 
});

如果您需要在服务中进行处理,您可能需要使用$ q服务。在这种情况下,您需要将其注入您的服务。

myService.serviceName = function (userId) {
    var defer = $q.defer();
    $http({
        method: 'POST',
        url: '/someUrl'
    }).then(function (response) {
        // Do the processing.
        defer.resolve(response);
    }).catch(function (error) {
        defer.reject(error);
    });
    return defer.promise;
};

在您的控制器中:

myService.serviceName(123).then(function(response) {
    // Indicate that everything went OK.
}, function(error) {
    // Check the error and change the UI accordingly.
});

答案 1 :(得分:0)

您可以添加向服务添加回调的功能。

这样控制器可以将自己的回调方法注册到服务。当错误发生时,它将调用所述回调方法。通知控制器发生的错误和所需的消息。