2012-11-05 12 views
6

nach ein paar Verständnis-Probleme habe ich in wirklich harten Probs geraten. Ich kann meine benutzerdefinierten Header nicht für die $ Anfrage von AngularJS verwenden. Meine Definition sieht wie folgt aus:

$scope.re = $resource('/', { 
    callback: 'JSON_CALLBACK' 
    }, { 
    'updateCart': { 
     method: 'POST', 
     headers: { 
      'module': 'Shop', 
      'mod_id': '1', 
      'event': 'updateCart' 
     } 
    } 
}); 

Auch hier JSFIDDLE

Ist das Issue noch aktiv? Gibt es eine andere Möglichkeit, benutzerdefinierte Header festzulegen? Danke für jede Hilfe! :)

+0

Sieht aus wie die fast das benutzerdefinierte Header-Problem mit $ Ressource in Angular 1.1.1 pathological-Kerning (2012-11-26) behoben haben, dass Version als instabil gilt, obwohl ... wahrscheinlich warten muss, bis nächste stabile Version zu haben diese in den stabilen Zweig https://github.com/angular/angular.js/blob/master/CHANGELOG.md ($ resource: Unterstützung benutzerdefinierte Header pro Aktion (fbdab513, # 736)) – Preexo

+1

Falls Sie Ist Ihnen nicht bekannt, können Sie den niedrigeren $ http-Dienst anstelle von $ resource verwenden. $ http unterstützt benutzerdefinierte Header. –

Antwort

3

Ich glaube, Sie müssen auf $ http für benutzerdefinierte Header zurückfallen. Ich habe auch versucht, ähnliche Aufgaben zu erledigen, aber es gibt keine Möglichkeit, dies mit $ resource zu tun.

+4

Header, die Sie mit dem globalen Objekt '$ httpProvider.defaults.headers.post' konfigurieren, gelten nicht nur für alle '$ http'-Aufrufe, sondern auch für alle' $ resource'-Aufrufe. Wenn Sie damit leben können, dass es global für Ihre gesamte Anwendung konfiguriert ist, könnte dies eine Umgehung sein. Siehe [hier] (http://docs.angularjs.org/api/ng.$http) unter "HTTP-Header einstellen" – vsp

+0

Tatsächlich habe ich '$ httpProvider.defaults.headers.post' verwendet. Ich dachte es offensichtlich, also habe ich es nicht erwähnt. –

+0

Nun, das ist scheiße. –

0

Dieser Beitrag ist ein bisschen alt, aber ich antworte für andere Leute wie mich, die Suche nach einer Antwort waren:

return $resource('api/people/:id', {id: '@id'}, { 
 
     min: { 
 
      data: '', 
 
      method: 'GET', 
 
      headers: {'Content-Type': 'application/min+json'}, 
 
      isArray: true 
 
     }, 
 
     update: { 
 
      method: 'PUT' 
 
     } 
 
    });

Bitte nicht die data vergessen, da sonst nicht die nicht gesetzt Header.

Für Leute wie mich Typisierung zu lieben, kann ein Baumeister in Typoskript erfolgen wie folgt:

export class ResourceBuilder { 
 

 
     static $inject = ['$resource']; 
 

 
     constructor(private $resource: ng.resource.IResourceService) { 
 
     } 
 

 
     private updateAction: ng.resource.IActionDescriptor = { 
 
      method: 'PUT', 
 
      isArray: false 
 
     }; 
 

 
     private minAction: any = { 
 
      data: '', 
 
      method: 'GET', 
 
      headers: {'Content-Type': 'application/min+json'}, 
 
      isArray: true 
 
     }; 
 

 
     public getResource(url: string, params?: Object): CrudResourceClass<any> { 
 
      let resource = this.$resource(url, params, { 
 
       update: this.updateAction, 
 
       min: this.minAction 
 
      }); 
 
      return <CrudResourceClass<any>> resource; 
 
     } 
 
    }

Die minAction vom Typ any weil die ng.resource.IActionDescriptor Misses diese Eigenschaft ist, weiß ich nicht Wenn sie es vergessen haben, werde ich ein Problem dafür eröffnen.

Ich hoffe es hilft.