我试图在收到的角度$资源和我的控制器之间添加一个抽象层。我必须执行一些操作,如过滤,所以我设置了一个服务来执行这些中间函数。
我能够毫无问题地设置第一个资源调用:
/**
* 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);
}
);
产生了这个错误:
答案 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);
}
);