2016-08-25 1 views
0

Ich versuche einen REST-Webservice zu verwenden, indem ich mit einem JSON-String antworte, der ein ziemlich "komplexes" Schema enthält.

Ich habe ein Modell erstellt, das alle vom Webservice gesendeten Felder enthält.

Hier sind die relevanten Codes, die ein Problem sein sollte:

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]); 

ich viele Änderungen haben, versuchen, den Anruf zu beheben ohne Erfolg ... Die Anfrage erhält tatsächlich eine Antwort, die die JSON-Zeichenfolge enthält, aber ich kann sie nicht in ein Objekt einfügen verwenden (wie Benutzer [ ‚id‘] = 2)

Vielen Dank im Voraus

löschte ich den letzten Beitrag und machte diese neue, die erste nicht klar genug war, und die Leute waren verwirrt

Antwort

2

Wenn Sie mit Versprechen arbeiten, sollten Sie Angular die Auflösung behandeln lassen. Habe ich recht, wenn Sie tatsächlich AngularJS 1 und nicht ng2 verwenden, da die Frage markiert ist? Die Syntax ist sowieso ng1.

Einige Hinweise auf die getUser Methode. Geben Sie die von $resource erstellte Referenz zurück, anstatt eine eigene zu erstellen. Verwenden Sie außerdem die Fettpfeilsyntax für die Rückrufe, um this an den richtigen Kontext zu binden. See this article for more on this.

Um noch mehr Code zu entfernen, verwenden Sie die TypeScripts-Objektinitialisierung und initialisieren Sie das Benutzer-ID-Objekt mit nur { user_id }. Dies erstellt ein JavaScript-Objekt mit einer Eigenschaft user_id mit dem Wert 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"; 
    }); 
} 

In Ihrer Komponente oder Controller Zugriff

this.userConnecte = this.gestionUserService.getUser(759); 

Schließlich ist die Fabrik/Service. Verwenden Sie die Tatsache, dass $resource generisch ist und setzen Sie Ihre Variablen als Konstanten, wenn sie nicht geändert werden.

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

Dies sollte Ihre Probleme beheben und Code lesbarer machen. :)

+0

Vielen Dank Kumpel, für Angular 1/2, ich versuche, ein Kollege Problem zu lösen (und sie argumentiert immer noch, dass "es ist angular 2 !!!"). Wie auch immer, vielen Dank für deine Hilfe, wir werden es mit deiner Methode versuchen und wenn es funktioniert, gebe ich dir die Antwort und viel Liebe! Danke noch einmal –

Verwandte Themen