我尝试使用REST Web服务,使用包含公平"复杂"的JSON字符串进行响应。架构。
我创建了一个包含webservice发送的每个字段的模型。
以下是应该成为问题的相关代码:
public getUser(user_id: number): PlanDeCharge.Modeles.User {
var toto;
this.UserRest.get({ user_id: user_id }, function(){}, function(err){
this.$window.location.href = "http://localhost:8080/myapp_webapp/login.do";
}).$promise.then(function(data){
toto = data;
});
return toto;
}
-
this.userConnecte = this.gestionUserService.getUser(759);
-
export function userRest($resource: ng.resource.IResourceService, $cookies: ng.cookies.ICookiesService): PlanDeCharge.Modeles.IUserResource {
this.key = $cookies.get("encodedKey");
var urlService: string = "http://localhost:8080/teambox_webapp/resource-rest/V1_1/users/:user_id";
return <PlanDeCharge.Modeles.IUserResource> $resource(urlService, {user_id: "@user_id"}, {
get:{
headers:{"key" : this.key}
}
});
}
app.factory("UserRest", ["$resource", "$cookies", userRest]);
我做了很多修改,试图修复调用但没有成功......请求实际上得到一个包含JSON字符串的响应,但是我无法将其放在要使用的对象中(如用户[ &#39; id&#39;] = 2)
提前致谢
我删除了上一篇文章并制作了这个新文章,第一篇文章不够清晰且人们感到困惑
答案 0 :(得分:2)
使用promises时,您应该让Angular处理解决方案。 我是对的,如果你实际上使用的是AngularJS 1而不是ng2,那么标记的问题是什么?无论如何语法都是ng1。
关于getUser
方法的一些注释。返回由$resource
创建的引用,而不是创建自己的引用。此外,在回调上使用fat-arrow语法将this
绑定到正确的上下文。 See this article for more on this
要删除更多代码,请使用TypeScripts对象初始化并使用{ user_id }
初始化用户ID对象。这将创建一个JavaScript对象,其属性为user_id
,其值为user_id
。
public getUser(user_id: number): SomeModel {
return this.UserRest
.get({ user_id }, () => { }, () => {
this.$window.location.href = "http://localhost:8080/myapp_webapp/login.do";
});
}
在您的组件或控制器访问中
this.userConnecte = this.gestionUserService.getUser(759);
最后,工厂/服务。
使用$resource
是通用的这一事实,并在未更改时将变量设置为常量。
export function userRest(
$resource: ng.resource.IResourceService,
$cookies: ng.cookies.ICookiesService
): ng.resource.IResourceClass<PlanDeCharge.Modeles.IUserResource> {
this.key = $cookies.get("encodedKey");
const urlService = "http://localhost:8080/teambox_webapp/resource-rest/V1_1/users/:user_id";
return $resource<PlanDeCharge.Modeles.IUserResource>(urlService, { user_id: "@user_id" }, {
get: {
headers: { "key": this.key }
}
});
}
这应该可以解决您的问题并使代码更具可读性。 :)