0.5.0 • Published 9 years ago
ng2-api v0.5.0
ng2-api
Angular2 API services that wrap Http. See full client and server example ng2-api-examples
Install
npm i --save ng2-apiUsage
auth.guard.ts
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
export function authenticated(): boolean {
return !!localStorage.getItem('token');
}
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router) {}
canActivate() {
if (authenticated()) { return true; }
// Navigate to the login page
this.router.navigate(['/login']);
return false;
}
}auth.service.ts
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { ApiHttp } from 'ng2-api';
import { authenticated } from './auth.guard';
@Injectable()
export class AuthService {
user: Object;
authenticated: boolean = authenticated();
constructor(protected http: ApiHttp,
protected router: Router) {
try {
this.user = JSON.parse(localStorage.getItem('profile'));
} catch(e) {
this.user = {};
}
}
login(params: any) {
return this.http.post('login', JSON.stringify(params))
.subscribe((res: Response) => {
let {token, user} = res.json();
let {token, user} = {token: 'abc', user: params};
localStorage.setItem('profile', JSON.stringify(user));
this.http.config.token = token;
this.authenticated = true;
this.user = user;
this.router.navigate(['/admin/posts']);
});
}
logout() {
localStorage.removeItem('profile');
this.http.config.token = '';
this.authenticated = false;
this.user = null;
this.router.navigate(['/login']);
}
}app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpModule, Http } from '@angular/http';
import { FormsModule } from '@angular/forms';
import { ApiConfig, ApiHttp } from './ng2-api';
import { AppComponent } from './app.component';
import { AuthService } from './shared/auth.service';
import { PostsComponent } from './posts/posts.component';
import { PostsService } from './posts/posts.service';
import { routing } from './app.routing';
@NgModule({
imports: [
BrowserModule,
HttpModule,
FormsModule,
routing
],
declarations: [
AppComponent,
PostsComponent,
],
providers: [
{
provide: ApiHttp,
useFactory: (http: Http) => new ApiHttp(new ApiConfig({baseUrl: '/api'}), http),
deps: [Http]
},
AuthService,
PostsService,
],
bootstrap: [AppComponent]
})
export class AppModule {}posts.service.ts
import { Injectable } from '@angular/core';
import { ApiService } from 'ng2-api';
export interface Post {
id?: number;
title: string;
body: string;
}
@Injectable()
export class PostsService extends ApiService<Post> {
constructor(protected http: ApiHttp) {
super(http, 'posts');
}
}ApiService methods
find(id: number | string): Observable<Post>
findAll(search?: any): Observable<Post[]>
create(model: Post): Observable<Post>
update(model: Post): Observable<Post>
delete(model: Post): Observable<boolean>ApiService customization
You can customize resource path and provide optional config to super().
If need, you can also overwrite ApiService public (i.e. update) and private methods (i.e. serialize, deserialize)
Example:
@Injectable()
export class PostsService extends ApiService<Post> {
constructor(protected http: ApiHttp) {
super(http, 'posts', {
arrayRoot: 'posts',
objectRoot: 'post'
});
}
}Tests
npm i
npm testLicense
MIT
0.5.0
9 years ago
0.4.2
9 years ago
0.4.1
9 years ago
0.4.0
9 years ago
0.3.7
9 years ago
0.3.6
10 years ago
0.3.5
10 years ago
0.3.4
10 years ago
0.3.3
10 years ago
0.3.2
10 years ago
0.3.1
10 years ago
0.3.0
10 years ago
0.2.5
10 years ago
0.2.4
10 years ago
0.2.3
10 years ago
0.2.2
10 years ago
0.2.1
10 years ago
0.2.0
10 years ago
0.1.0
10 years ago
0.0.1
10 years ago