$ resource .then()在收到资源后抛出错误

时间:2015-01-23 15:48:33

标签: angularjs angularjs-service angularjs-resource

我试图在收到的角度$资源和我的控制器之间添加一个抽象层。我必须执行一些操作,如过滤,所以我设置了一个服务来执行这些中间函数。

我能够毫无问题地设置第一个资源调用:

/**
 * Get Grid
 *
 * retrieves grid resource and serializes the grid, rows, columns and widgets themselves
 */
this.getGrid = function() {
    var gridResource = new GridResource();
    var response = gridResource.$query();

    var accGrid = new Grid;

    response.then(function(response) {
        angular.forEach(response.grid, function(row) {
            var accRow = new Row;

            angular.forEach(row.columns, function(column) {
                //Setting up new Column
                var accColumn = new Column();
                accColumn.setId(column.id);

                //Setting up new Widget(s)
                var accWidget = new Widget;
                accWidget.setId(column.widget.id);
                accWidget.setName(column.widget.name);
                accWidget.setType(column.widget.type);
                accWidget.setChildren(column.widget.children);
                accWidget.setVars(column.widget.vars);

                accColumn.addWidget(accWidget);
                accRow.addColumn(accColumn);
            });

            accGrid.addRow(accRow);
        });
    });
    return accGrid;
};

这将返回包含所有填充部分的Grid对象。

然而,当我尝试在不同的端点上执行相同的方法时,Angular抱怨:

http://puu.sh/eUSbx/3c15a8b13a.png

我只是在方法中达到了这一点:

/**
 * Get all Widgets
 *
 * Retrieves all widgets belonging to the route, regardless if they are in the canvas or not
 */
this.getWidgets = function() {
    var widgets = new Array();
    var widgetResource = new WidgetResource();
    var response = widgetResource.$query();


    response.then(function(response) {
        console.log(response);
    });

    return widgets;
};

如果你想知道$资源本身:

designService.factory('GridResource', ['$resource',
function($resource){
    return $resource('view/canvas', {},
        {
            query: { method:'GET' },
            save: { method:'POST' }
        });
}]);

designService.factory('WidgetResource', ['$resource',
function($resource) {
    return $resource('view/widget', {},
        {
            query: { method:'GET', isArray: true }
        });
}]);

我是一个PHP家伙,正在进入前端JS奇妙的奇怪世界,真的可以使用指针:汗湿的笑容:谢谢!

**更新**我已经了解到Angular如何使用then来捕获错误响应,所以我更新了我的查询:

    widgetResource.$query().then(
        function(response) {
            console.log(response);
        }, 
        function(error) {
            console.log(error);
        }
    );

产生了这个错误:

http://puu.sh/eUYYx/998c73600a.png

2 个答案:

答案 0 :(得分:0)

您的代码似乎很好,请查看控制器中的依赖注入。您可能错过了一个或拼错了?

答案 1 :(得分:0)

**得到答案**

Angular非常挑剔!问题是我试图从已经给出的资源对象创建一个新的资源对象。直接将response分配给WidgetResource.query()的结果就足够了。这可能是因为我WidgetResource.query()具有isArray属性为真。

/**
 * Get all Widgets
 *
 * Retrieves all widgets belonging to the route, regardless if they are in the canvas or not
 */
this.getWidgets = function() {
    var widgets = new Array();
    //var widgetResource = new WidgetResource();
    var response = WidgetResource.query();

    response.$promise.then(
        function(response) {
            console.log(response);
        }, 
        function(error) {
            console.log(error);
        }
    );