acá está la ruta al archivo artists.json
¿Qué es Ionic?
Requisitos del curso y presentación del proyecto
¿Qué hay de nuevo en Ionic 4?
¿Qué ha cambiado en Ionic?
Instalación de Ionic y templates básicos
Instalación de Capacitor y uso en Android Studio
Uso de Capacitor y xCode
Sincronizando nuestro proyecto con los emuladores
Componentes básicos de Ionic
El componente Slides
CSS y Custom Properties de los componentes de Ionic
Slides dinámicos
Angular Router e Ionic Storage
Controlar la navegación con Guards
Utilidades de CSS con Ionic
Crear una página de login
Validar inputs del formulario de login
Envío del formulario
Servicio para validar credenciales
Agregar Guards a nuestro login
Crear una página de registro
Navegación entre login y registro
Agregar un menú con el componente Menu
Dar funcionalidad y estilos al menú
Uso de componente Slides y opciones avanzadas
Consumo y manejo de informacion con Ionic
Consumiendo un API para llenar información de nuestros artistas
Página completa con artistas, canciones y álbums
El componente Modal y el Modal Controller
Llenar de contenido el Modal
Componente Footer y funcionalidad del Modal
Construyendo nuestro reproductor
Lógica de nuestro reproductor
RETO: Vista de álbums
Acceso al hardware
Usar la cámara a través de Capacitor
Corrección de errores y afinando detalles
Mejorando nuestra página de Settings con CSS
Página Sports y Angular Maps
Crear la página Sport
RETO: Buscador dinámico en Sports
Llevar nuestra aplicación a producción con Android
Llevar nuestra aplicación a producción con iOS y cierre del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
La URL de la API cambió a https://platzi-music-api.herokuapp.com
Por ejemplo, el endpoint de nuevos lanzamientos sería: https://platzi-music-api.herokuapp.com/browse/new-releases
Aportes 9
Preguntas 4
acá está la ruta al archivo artists.json
Mi versión con Observables (Ojo no eliminé subscripciones)
Servicio:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable, of } from 'rxjs';
import * as dataArtist from './artists.json';
@Injectable({
providedIn: 'root'
})
export class PlatziMusicService {
constructor(private http: HttpClient) { }
getNewReleases(): Observable<any> {
const api = 'https://platzi-music-api.now.sh/browse/new-releases';
return this.http.get(api);
}
getArtists(): Observable<any> {
return of(dataArtist.items);
}
}
Componente:
ionViewDidEnter() {
forkJoin({
newReleases: this.musicService.getNewReleases(),
artists: this.musicService.getArtists()
}).subscribe(({newReleases, artists}) => {
this.songs = newReleases.albums.items.filter(e => e.album_type === 'single');
this.albums = newReleases.albums.items.filter(e => e.album_type === 'album');
this.artists = artists;
});
} ```
Para trabajar con JSON estático se debe adicionar la siguiente línea en el archivo ts.config.json
"resolveJsonModule": true,
En el archivo en donde se definen los servicios platzi-music.service.ts, getArtists() es un poco diferente a lo explicado por el profesor
import * as dataArtists from './artists.json';
...
getArtists() {
return dataArtists;
}
En el componente home.page.ts se llena el arreglo así:
this.artists = this.musicService.getArtists().items;
Cambiando/agregando solamente la opción “resolveJsonModule”: true no me funcionaba la lectura del json, me lo mostraba como un módulo y no lo trataba como un json.
.
Para solucionarlo cambié en compilerOptions:
“module”: “es2020” por “module”: “commonjs”
primero haremos que se pueda cargar archivos estaticos .json en la aplicación, cambiando la configuracion en tsconfig.json
tsconfig.json
"compilerOptions": {
...
"experimentalDecorators": true,
"resolveJsonModule": true,
"moduleResolution": "node",
...
},
luego ingresamos el archivo json “artists.json” dentro de nuestros servicios, con la información de este archivo
Luego modificamos nuestro servicio de consumo de API platzi-music, para que consuma el archivo json “artists.json”
platzi-music.service.ts
import * as dataArtists from './artists.json';
...
getArtists() {
return dataArtists;
}
Luego vamos al home page para consumir esta nueva función del servicio de platzi-music
home.page.ts
export class HomePage {
artists: any[] = [];
constructor(
private musicService: PlatziMusicService
) {}
ionViewDidEnter() {
this.fetchArtist();
}
fetchArtist() {
this.artists = this.musicService.getArtists().items;
}
Hacemos los cambios en el html del home page para incluir a los artistas
home.page.html
<ion-content fullscreen="true" class="ion-padding">
<h1>Artistas</h1>
<ion-slides [options]='slideOps' *ngIf="artists.length">
<ion-slide *ngFor="let artist of artists">
<ion-avatar>
<img [src]="artist.images[0].url" alt="">
<span>{{artist.name}}</span>
</ion-avatar>
</ion-slide>
</ion-slides>
<h1>Albums</h1>
<ion-slides [options]='slideOps' *ngIf="albums.length">
<ion-slide *ngFor="let album of albums">
<ion-avatar class="square-avatar">
<img [src]="album.images[0].url" alt="">
<span>{{album.name}}</span>
</ion-avatar>
</ion-slide>
</ion-slides>
<h1>Canciones</h1>
<ion-slides [options]='slideOps' *ngIf="songs.length">
<ion-slide *ngFor="let song of songs">
<ion-avatar class="square-avatar">
<img [src]="song.images[0].url" alt="">
<span>{{song.name}}</span>
</ion-avatar>
</ion-slide>
</ion-slides>
</ion-content>
finalmente hacemos los cambios en los estilos del home page
home.page.scss
ion-avatar {
height: 120px;
width: 90%;
}
ion-avatar img {
width: 90px;
height: 90px;
}
ion-avatar span {
font-size: 12px;
}
.square-avatar {
--border-radius: 0;
}
Cargar archivos estaticos .json
tsconfig.json
{
...
"resolveJsonModule:" true,
...
}
Importar .json en un service
service.ts
import * as dataArtists from "./artists.json";
ion-avatar con borde cuadrado
home.page.scss
.square-avatar{
--border-radius: 0;
}
Muy buena explicación. ¿ Estos arhivos json los podemos usar para guardar opciones de configuración?
aca el link del repo de esta clase, aunque aca si la parte de css si esta “feo” porque al cambiar el dispositivo si ya se descuadra o las imagenes se ven mas “alargadas” dependiendo del dispositivo
Recuerden estamos trabajando con sass, por lo que podemos anidar los selectores:
ion-avatar {
height: 120px;
width: 90px;
img {
height: 90px;
width: 90px;
}
span {
font-size: 12px;
}
&.squared-avatar {
–border-radius: 0;
}
}
Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.