我正在向我的API发出请求,我正在使用AngularJS $资源模块.它与$ http不同,所以我不知道如何处理我的错误.
我的服务:
var appServices = angular.module('app.services', ['ngResource']);
appServices.factory('Category', ['$resource',
function($resource){
return $resource('/apicategoryerr/?format=:format', {}, {
query: {
method: 'GET',
params: { format: 'json'},
isArray: true,
}
});
}]);
Run Code Online (Sandbox Code Playgroud)
我的控制器:
...
Category.query(function(data) {
console.log(data);
});
...
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西或..如果我的API无效,我不知道如何处理错误..
Category.query().success(function() {
console.log('success');
}).error(function() {
console.log('error');
});
Run Code Online (Sandbox Code Playgroud) 我有一个使用$ resource的简单控制器:
var Regions = $resource('mocks/regions.json');
$scope.regions = Regions.query();
Run Code Online (Sandbox Code Playgroud)
我在指令中使用这个控制器(在链接函数中)
var regions = scope.regions;
Run Code Online (Sandbox Code Playgroud)
但是地区是不确定的.调用是异步的,这是相当逻辑的.
我的问题是如何才能等待结果和区域成为包含所有数据的数组?
UPDATE :
Run Code Online (Sandbox Code Playgroud)
这里是指令的定义
app.directive('ngMap', function() {
return {
restrict: 'EA',
replace: 'true',
scope: {
},
template: '<div id="map"></div>',
controller: 'AccordMapCtrl',
link: function(scope, element, attrs) {
var regions = scope.regions;
console.log(regions);
for (var region in regions) {}
};
});
Run Code Online (Sandbox Code Playgroud) AngularJS文档中有些东西我似乎无法找到,或者我可能只是遗漏了.
我正在后端创建一个带有NodeJS和Express的Web应用程序,我试图了解它如何与前端的Angular交互.特别是,我将为Angular提供一个JSON API来获取信息.我希望前端始终保持最新状态.
我的问题是:
我似乎发现的每个例子都涉及客户端获取数据一次.不与服务器同步数据.
我正在使用AngularJS与RESTfulWeb服务进行交互,$resource用于抽象暴露的各种实体.这些实体中的一些是图像,因此我需要能够使用"对象" 的save动作$resource在同一请求中发送二进制数据和文本字段.
如何使用AngularJS的$resource服务在单个POST请求中发送数据并将图像上传到安静的Web服务?
根据一些例子,看起来我们可以注入一个工厂,它包含一个像这样的休息服务的端点
services.factory('Recipe', ['$resource',
function($resource) {
return $resource('/recipes/:id', {id: '@id'});
}]);
Run Code Online (Sandbox Code Playgroud)
这看起来很棒,但想象我有其他端点即/ users /:id和/ groups /:id,因为您可以想象不同端点的数量将会增加.
因此,优良作法是为每个端点设置不同的工厂,以便...
services.factory('Recipe', ['$resource',............
services.factory('Users', ['$resource',.............
services.factory('Groups', ['$resource',...............
Run Code Online (Sandbox Code Playgroud)
或者还有另一种推荐方式吗?
我真的没有看到它的问题,但它会迫使我创建很多工厂只是为了处理不同的端点.
任何帮助或指导真正适用
谢谢
delete和remove方法有什么区别?它们都使用DELETEHTTP方法.我找不到任何合理的信息.
我看一下Angular API for $ resource,我没有找到一些方法来发送Request Body一个RESTful服务.
我知道这可以使用$ http方法,就像这里一样,所以,它是否也可以使用$resource?
显然这是可供选择的$resource.
action - {string} - 操作的名称.此名称将成为资源对象上方法的名称.
method - {string} - HTTP请求方法.有效的方法是:GET,POST,PUT,DELETE和JSONP
params - {object =} - 此操作的可选预绑定参数集.
isArray - {boolean =} - 如果为true,则此操作的返回对象是数组,请参阅返回部分.
目前我没有找到任何方式来发送包含JSON对象的请求有效负载.
我正在尝试开始为我的角度应用程序编写单元测试并快速点击停止块,因为我不确定如何以可测试的方式模拟我的服务.
有没有办法模拟REST调用,否则看起来我需要在我的测试中反映我的服务中的所有内容,这对我来说似乎不对,但我对测试写作是相当新的,所以也许这就是它的假设要完成.任何帮助将不胜感激.
我的服务如下:
angular.module('resources.users', ['ngResource'])
.factory('User', function($resource) {
var resource = $resource('/api/index.php/users/:username', {}, {
'update': {method: 'PUT'}
});
resource.getUser = function(username, successCb) {
return resource.query({username: username}, successCb);
};
return resource;
});
Run Code Online (Sandbox Code Playgroud)
我的测试到目前为止:
describe('User', function() {
var mockUserResource;
beforeEach(module('resources.users'));
beforeEach(function() {
mockUserResource = sinon.stub({
getUser: function(username) {
mockUserResource.query({username: username});
},
query: function() {}
});
module(function($provide) {
$provide.value('User', mockUserResource);
})
});
describe('getUser', function() {
it('should call getUser with username', inject(function(User) {
User.getUser('test');
expect(mockUserResource.query.args[0][0]).toEqual({username: 'test'});
}));
})
});
Run Code Online (Sandbox Code Playgroud) 我需要从其他API获取数据,其中产品ID是url的一部分(而不是查询参数).
工厂:
.factory('Products', ['$resource',
function($resource) {
return $resource('products/:productId', {
productId: '@id'
}, {
query: {
isArray: false
},
update: {
method: 'PUT'
}
});
}
])
Run Code Online (Sandbox Code Playgroud)
控制器:
$scope.getProduct = function(id, from) {
$scope.product = Products.get({ id: id }, function(){
console.log($scope.product);
});
}
Run Code Online (Sandbox Code Playgroud)
我的网址构造如下:
/products?id=5426ced88b49d2e402402205
Run Code Online (Sandbox Code Playgroud)
代替:
/products/5426ced88b49d2e402402205
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
关于Angular的一个特性和复杂性的一点是,它对于如何与RESTful API进行交互并不是很自以为是.我知道有关资源,Restangular以及您自己推出的各种想法.
在一个拥有大量资源(包括各种嵌套)的复杂应用程序中,有理由认为 Restangular优于$ resource; 出于类似的原因,Restangular比滚动自己更好.
直到最近我才看到的一个解决方案是JSData及其AngularJS(repo)的包装器.从Github(~900)的收藏数量来看,如果不使用它,它有相当多的人对它至少感兴趣.它只是Restangular在Github(5k +)上的一小部分,但仍然很重要.
对于那些同时使用Restangular和JSData的人来说,你对它们的比较有什么看法(优点/缺点;目的,可靠性等方面的差异;从文档中可能不太明显的事情)?要使这个问题保持开放,请坚持事实而不是意见.
我从以下内容中得到的印象如下:
javascript angularjs angular-resource restangular angular-data
angular-resource ×10
angularjs ×10
javascript ×2
angular-data ×1
promise ×1
restangular ×1
upload ×1