使用工厂时,错误事件在Angular中的位置是什么?

时间:2013-08-23 18:36:40

标签: angularjs error-handling

我有下面的代码工作,但现在我需要为发生错误时创建一个处理程序,但不确定我是如何插入的..我在主方法中将它放在工厂中吗?

MsaApp.factory('Msa', function ($resource) {
return $resource('/api/Place/:id', { id: '@id' }, { update: { method: 'PUT' } });

});

 $scope.delete = function () {
    debugger;
    var id = this.msa.PlaceId;
    Msa.delete({ id: id }, function () {
        $('#todo_' + id).fadeOut();
    });
}

编辑1:

 $scope.delete = function () {
    debugger;

    // var id = this.msa.PlaceId;

    var config = {
        method: 'PUT',
        url: 'api/Place/:id',
        data: { 'some': 'data' }
    }

    $http(config)
    .success(function (data, status, headers, config) {
        console.log(data);
    })
    .error(function (data, status, headers, config) {
        console.log(data);
    });


    //Msa.delete({ id: id }, function () {
    //    $('#todo_' + id).fadeOut();
    //});
}

1 个答案:

答案 0 :(得分:1)

首先,我会将所有DOM操作移动到一个指令,并让控制器执行它应该做的事情。

回答你的问题(希望我理解正确):

MsaApp.factory('Msa',['$http', function(http) {
    return {

        delete: function(someData) {

            var config = {
                method: 'PUT',
                url: '/api/Place/:id',
                data : someData
            };

            http(config)
            .success(function(data, status, headers, config) {

                console.log(data);

            })
            .error(function(data, status, headers, config) {
                    console.log(data);
            });



        }}

    };
}])

MsaApp.controller('ControllerName', ['$scope', 'Msa', function(scope, Msa) {

    $scope.delete = function({ id: id }) { 
        debugger; 
        Msa.delete({ id: id }); 
        $('#todo_' + id).fadeOut(); 
    };

}])

如果您的工厂无法访问控制器范围并且您希望返回,例如消息返回控制器,则需要使用此处说明的承诺: http://markdalgleish.com/2013/06/using-promises-in-angularjs-views/