无法从$ resource中提取数据(使用其余的web服务)

时间:2016-08-25 14:00:56

标签: javascript rest angular typescript

我尝试使用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)

提前致谢

我删除了上一篇文章并制作了这个新文章,第一篇文章不够清晰且人们感到困惑

1 个答案:

答案 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 }
    }
  });
}

这应该可以解决您的问题并使代码更具可读性。 :)