Typescript Snippet - $resource
Mit Hilfe des Angular $resource Service, kann auf einfache Art und Weise eine RESTful API angespochen werden.
Für den typisierten Zugriff mit Typescript gestaltet sich die Anwendung des $resource Service ein wenig aufwendiger. In einem ersten Schritt muss eine Resource als Interface definiert werden, welche von IResource erbt.
export interface IMyData extends ng.resource.IResource<IMyData> {
id: number;
name: string;
}
Als nächstes wird eine eigene ResourceClass definiert, die von IResourceClass ableitet. Dieses Vorgehen hat den Vorteil, dass zu den Default-Methoden (delete, get, query, remove und save) des IResourceClass Interface eigene Methoden definiert werden können.
export interface IMyDataResource extends ng.resource.IResourceClass<IMyData> {
mymethod: ng.resource.IResourceArrayMethod<IMyData>;
}
Der $resource Service wird nun mit Hilfe einer Type Assertion erzeugt und konfiguriert.
namespace App {
'use strict';
export interface IDataContext {
mydata(): IMyDataResource;
}
class DataContext implements IDataContext {
static $inject = ['$resource'];
constructor(private $resource: angular.resource.IResourceService) { }
public mydata(): IMyDataResource {
let methodDescriptor: angular.resource.IActionDescriptor;
return this.$resource("/your/api", { id: '@id' }, {
mymethod: methodDescriptor = { method: 'GET', isArray: true }
}) as IMyDataResource;
}
}
angular.module('app').service('DataContext', DataContext);
}