Vamos a desarrollar una última componente haciendo uso del framework de Bootstrap original, para ver como integrarlo a Angular. Con esto podemos luego crear componentes visuales similares a las que propone Bootstrap pero con las funcionalidades de Angular.
Crear una componente llamada TarjetaComponent y cuyo selector debe llamarse 'boot-tarjeta'.
Mediante dos propiedades se deben poder cargar la url de una imagen, el título de la tarjeta y debe avisarnos cuando se presiona su botón.
Probar la componente recuperando los datos de un usuario de un servidor público. Recuperar del servidor:
https://www.ejerciciostutorialesya.com/angular/personas.php
Nos retorna un arreglo de una única componente con formato JSON:
[{"codigo":"1","nombre":"Marcos rodriguez",
"mail":"mrodriguez@gmail.com",
"foto":"https:\/\/www.ejerciciostutorialesya.com\/angular\/fotos\/persona1.jpg"
}
]
Crearemos primero el proyecto
ng new proyecto042
Instalamos el Bootstrap original con alguna de las tres formas vistas en conceptos anteriores, mediante CDN o localizandolo en la capeta 'assets' o mediante npm.
Crearemos el servicio que recuperará desde el servidor público los datos de un usuario:
ng generate service usuario
Modificamos el archivo para recuperar los datos del servidor, debemos importar la clase 'HttpClient' e inyectar al constructor la referencia de un objeto de dicha clase al cual llamamos 'http':
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class UsuarioService {
constructor(private http: HttpClient) { }
retornar() {
return this.http.get("https://www.ejerciciostutorialesya.com/angular/personas.php");
}
}
El método 'retornar' será llamado desde la componente principal, este método mediante el objeto de la clase HttpClient llama al método get y le pasa como parámetro la URL del servidor que retornará el archivo JSON con los datos de 1 persona.
Modificamos el archivo app.module.ts importando la clase HttpClientModule para poder emplear la clase 'HttpClient' que definimos en la clase 'UsuarioService':
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { HttpClientModule } from '@angular/common/http';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
HttpClientModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Crearemos la componente 'tarjeta' e indicamos como prefijo para la nueva etiqueta la cadena 'boot' (la idea es recordarnos que esta componente utiliza la librería de Bootstrap):
ng generate component tarjeta --prefix boot
Modificamos el archivo 'tarjeta.component.ts':
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'boot-tarjeta',
templateUrl: './tarjeta.component.html',
styleUrls: ['./tarjeta.component.css']
})
export class TarjetaComponent implements OnInit {
@Input() datos:any;
@Output() presionopcion = new EventEmitter();
constructor() { }
ngOnInit(): void {
}
presion(): void {
this.presionopcion.emit();
}
}
Definimos las dos propiedades:
@Input() datos:any; @Output() presionopcion = new EventEmitter();
Modificamos el archivo 'tarjeta.component.html':
<div class="card" style="width: 18rem;margin:1rem" *ngIf="datos!=null">
<img src="{{datos.foto}}" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">{{datos.nombre}}</h5>
<p class="card-text">
{{datos.mail}}<br>
</p>
<a href="#" class="btn btn-primary" (click)="presion()">Otra persona?</a>
</div>
</div>
Ahora nos queda consumir la componente 'boot-tarjeta', esto lo haremos desde la componente principal de nuestra aplicación Angular.
Modificamos el archivo 'app.component.ts':
import { Component, OnInit } from '@angular/core';
import { UsuarioService } from './usuario.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
usuario:any;
constructor(private usuarioService: UsuarioService) { }
ngOnInit() {
this.recuperarPersona();
}
recuperarPersona() {
this.usuarioService.retornar()
.subscribe(result => this.usuario = result);
}
presion() {
this.recuperarPersona();
}
}
Modificamos el archivo 'app.component.html':
<div *ngIf="usuario!=null; else espera"> <boot-tarjeta [datos]="usuario[0]" (presionopcion)="presion()"></boot-tarjeta> </div> <ng-template #espera>Esperando datos...</ng-template>
Ahora ejecutemos la aplicación:
ng serve -o
Tenemos como resultado:

Podemos probar esta aplicación en la web aquí.