Jesús Rodríguez

Escritor técnico

@Foxandxss

Foxandxss

Angular CLI

  • Sin herramientas visibles
  • Generadores
  • Entornos para desarrollo y producción
  • Muchas cosas más

Componentes

  • Páginas o secciones de estas
  • Típicos widgets
<user-details [user]="user"></user-details>
<ngb-datepicker [(ng-model)]="date"></ngb-datepicker>

<ngb-rating [(rate)]="currentRate"></ngb-rating>

Componentes

Metadatos

@Component({
  selector: 'osc-cmp',
  template: `<div>Hola, {{place}}</div>`,
  styles: '...',
  animations: '...'
})

Implementación

export class UserDetailComponent {
  place = 'Opensouthcode';
}

Directivas

Estructurales

<ng-template [ngIf]="isAdmin"> 
  <form>
    Administrator login form
    ...
  </form>
</ng-template>

¿Y esa sintaxis tan larga?

<form *ngIf="isAdmin">
  Administrator login form
  ...
</form>

Directivas

De atributo

<div>Your final score is: <span oscHighlight>10</span>

¿Cómo se hace?

@Directive({
  selector: '[oscHighlight]'
})
export class HighlightDirective {
  constructor(el: ElementRef) {
    el.nativeElement.style.backgroundColor = 'lightgreen';
  }
}

Servicios

Son clases normales y corrientes

@Injectable()
export class UserService {
  constructor(private http: Http) { }

  getUsers() { ... }
  
  getUser(id: number) { ... }
}

Módulos

Un registro de las diferentes partes de nuestra aplicación

@NgModule({
  imports: [BrowserModule],
  declarations: [AppComponent, FooComponent],
  providers: [UserService],
  exports: [FooComponent],
  bootstrap: [AppComponent]
})
export class AppModule {}

Router

const routes: Routes = [
  { path: '', redirectTo: '/languages', pathMatch: 'full' },
  { path: 'languages', component: LanguageListComponent },
  { path: 'languages/:id', component: LanguageDetailsComponent }
];

Una lista de rutas

Y exportamos un módulo

@NgModule({
  imports: [ RouterModule.forRoot(routes) ],
  exports: [ RouterModule ]
})
export class AppRoutingModule {}

Router

<a [routerLink]="language.id">{{Language.name}}</a>

Para movernos a otra ruta

Para adquirir el parámetro

constructor(private activatedRoute: ActivatedRoute) {
  this.langId = activatedRoute.snapshot.params['id'];
}
<router-outlet></router-outlet>

Y un lugar donde "cargar" las rutas

Pipes

Transforman nuestros datos

@Component({
  selector: 'osc-foo',
  template: '<div>{{text}}</div>'
})
export class FooComponent {
  text = 'hello world';
}
@Pipe({ name: 'capitalize'})
export class CapitalizePipe implements PipeTransform {
  transform(value: string, all: boolean) {
    if (all) {
      return value.split(' ').map(word => {
        return word[0].toUpperCase() + word.substring(1);
      }).join(' ');
    } else {
      return value[0].toUpperCase() + value.substring(1); 
    }
  }
}

Pipes

¿Cómo se usa?

<div>{{text | capitalize}}</div>

<div>{{text | capitalize: true}}</div>

Algunos pipes incluidos

<div>{{money | currency}}</div>

<div>{{today | date}}</div>

<div>{{obj | json }}</div>

HTTP

Basado en Observables

let req = http.get(...)
  .map(res => {
    // Hacer algo con el resultado
  });


req.filter(res => {
  // Filtrar resultado
})
.subscribe(res => {
  // Subscribirse al resultado
});

GRACIAS

opensouthcode-angular

By Jesus Rodriguez

opensouthcode-angular

"Introduccion a Angular", Opensouthcode 2017

  • 761