我想让服务提供以下代码中的资源:
angular.module('myApp.userService', ['ngResource'])
.factory('UserService', function ($resource)
{
var user = $resource('/api/user', {},
{
connect: { method: 'POST', params: {}, isArray:false }
});
return user;
}
然后,当使用该connect
操作时,我想动态传递一个HTTP标头,这意味着它可能随每次调用而改变。这是一个示例,在控制器中,请参见代码中的注释:
$scope.user = UserService;
$scope.connect = function ( user )
{
var hash = 'Basic ' + Base64Service.encode(user.login + ':' + user.password);
// I would like this header to be computed
// and used by the user resource
// each time I call this function
$scope.user.headers = [{Authorization: hash}];
$scope.user.connect( {},
function()
{
// successful login
$location.path('/connected');
}
,function()
{
console.log('There was an error, please try again');
});
}
您知道直接或通过技巧做到这一点的方法吗?
接受的答案不能完全回答问题,因为标头不是完全动态的,因为工厂实际上返回了工厂(!),而我的代码中不是这种情况。
由于$ resource是工厂,因此无法使其动态化。
最终,每次用户连接时,我都会销毁资源对象。这样,当用户连接时,我就可以计算出带有标头的资源。
@Stewie提供的解决方案对此很有用,因此我将其保持为接受状态。
这是我的连接方式,由于(重新)连接时资源被破坏/重新创建,因此可以多次使用:
this.connect = function (user)
{
self.hash = 'Basic ' + Base64Service.encode(user.login + ':' + user.password);
console.log("CONNECT login:" + user.login + " - pwd:" + user.password + " - hash:" + self.hash);
if (self.userResource)
{
delete self.userResource;
}
self.userResource = $resource('/api/user/login', {}, {
connect: {
method: 'POST',
params: {},
isArray: false,
headers: { Authorization: self.hash }
}
});
var deferred = $q.defer();
self.userResource.connect(user,
function (data)
{
//console.log('--------- user logged in ----- ' + JSON.stringify(data));
// successful login
if (!!self.user)
{
angular.copy(data, self.user);
}
else
{
self.user = data;
}
self.setConnected();
storage.set('user', self);
deferred.resolve(self);
},
function (error)
{
self.user = {};
self.isLogged = false;
storage.set('user', self);
deferred.reject(error);
}
);
return deferred.promise;
};
从angularjs v1.1.1和ngResource
v.1.1.1开始,可以使用action对象的headers
属性来完成此$resource
操作。
您可以将资源包装在一个函数中,该函数接受自定义标头作为参数,并返回一个$resource
对象,该对象的自定义标头设置为适当的操作定义:
[PLUNKER](http://plnkr.co/edit/bdETkJ8UJHdyuyFYvSHM?p=preview)
var app = angular.module('plunker', ['ngResource']);
app.controller('AppController',
[
'$scope',
'UserService',
function($scope, UserService) {
$scope.user = {login: 'doe@example.com', password: '123'};
$scope.connect = function() {
// dropping out base64 encoding here, for simplicity
var hash = 'Basic ' + $scope.user.login + ':' + $scope.user.password;
$scope.user.headers = [{Authorization: hash}];
UserService({Authorization: hash}).connect(
function () {
$location.url('/connected');
},
function () {
console.log('There was an error, please try again');
}
);
};
}
]
);
app.factory('UserService', function ($resource) {
return function(customHeaders){
return $resource('/api/user', {}, {
connect: {
method: 'POST',
params: {},
isArray: false,
headers: customHeaders || {}
}
});
};
});
我试图动态地获取给定数量的资源,但我无法理解语法。在资源集动态分配中,每个单元由其所属的资源集的名称表示。在图中,查封块将查封集合“resourcePool”中的3个资源。 我需要为每一个特工抓取特定数量的资源。然后我尝试创建资源池对象的ArrayList,并将其传递到动态分配中,但由于类型不匹配,因此无法工作。 例如,假设我有一个需要4个资源的代理,所以需要的表达式是:{resourcePool
问题内容: 使用RESTEasy,我实现了Application的子类来提供单例资源列表。有没有办法稍后动态添加另一个单例?我尚未从API文档中找到实现此目的的方法。 问题答案: 我自己还没有尝试过,但是我发现了一个博客文章,其中对此进行了描述:http : //sarbarian.wordpress.com/2010/03/07/resteasy-and- osgi-perfect-match/
每个网站都需要静态资源:图片、样式表、网站图标(favicon)等。在这种情况下,您可以在项目的根目录下创建一个名为 static 的目录。 放入 该目录中的每个文件都将被复制到 生成的 build 文件夹中,并保留目录的层级结构。例如,如果您将名为 sun.jpg 的文件添加到 static 文件夹中,则该文件将被复制到 build/sun.jpg 路径。 这意味着: 对于 baseUrl: '
我需要动态设置通知图像图标,它的名字动态传递给我的类。为此,我需要设置builder.setSmallIcon(intres_id)。我谷歌了一下,但是人们已经使用了setDrawableImage()的例子,我已经看到了这篇文章,并相应地在我的代码中实现。 当然,这会显示错误,因为setSmallIcon()需要将整数传递给它。con是传递给我的构造函数的上下文。我已经看到如何在android中
本文向大家介绍Android中获取资源 id 及资源 id 的动态获取,包括了Android中获取资源 id 及资源 id 的动态获取的使用技巧和注意事项,需要的朋友参考一下 Android中获取资源 id 及资源 id 的动态获取 我们平时获取资源是通过 findViewById 方法进行的,比如我们常在onCreate方法中使用这样的语句: findViewById是我们获取layout中各
我试图击中一个看起来像 。< br > < code > API shop . create([CreateCampaignService,{ auth _ token:user . token })] 我怎样才能使APIshop能够像这样的东西: 并点击 /