Aplcacion Angular
Aplcacion Angular
Aplcacion Angular
Instalar Git
>git –version
EJEMPLO:
Ruta:
https://getbootstrap.com/docs/4.2/getting-started/introduction/
Revisar CSS
Copiar:
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
integrity="sha384-
GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS"
crossorigin="anonymous">
Ejecutar >> ng serve -o // similar de lo que hace ionic serve
Seleccionar el archivo app.component y borrar todo el contenido.
Crear componentes básicos, se crea dos componentes.
ng g c pages/about --dry-run
base-angular>ng serve -o
Inca, que no ha realizado cambios
ng g c pages/contact
about.component.ts
Selector: selector: 'app-about'
Permite inyectar a otros componentes
ng g c pages/home
ng>>
g>> de generar
m>> módulo
ng g m appRouting –dry-run
ng>>
g>> de generar
m>> módulo
ng g m appRouting –flat
Declarar rutas, las rutas son direcciones en las cuales mediante el url, va a decir qué componente
o qué página, en este caso quiere mostrar.
Agregar:
Se necesita indicar a Angular que ahora tiene un sistema de rutas, pero para poder utilizar este
sistema de rutas, se necesita trabajar en la configuración del módulo.
Despúes:
Despúes de los cambios
Angular se de cuenta, que este es mi archivo de configuración de rutas, necesita importarlo en
el app.module.ts
app.module.ts
Se redirecciona a home
Se debe realizar el cambio en el archivo app.component. html
Antes:
Al redireccionar, siempre presentara la misma información
<router-outlet></router-outlet>
Ayudara a redireccionar en la url
Crear un menú:
Crear un componente independiente
ng>>
g>> generar
c>>componente
ng g c components/menu –dry-run
ng g c components/menu
<h1>App Componet</h1>
<app-menu></app-menu>
<router-outlet></router-outlet>
Routing, cuyo objetivo es permitir que en nuestra app haya rutas internas y la
navegación. El Routing es el responsable de reconocer la ruta que el usuario quiere
visualizar en cada momento
menu.component.html
<p>menu works!</p>
<!--Crear lista usar clases de Bootstrap-->
<ul class="list-group">
<a routerLink="/home" class="list-group-item"> Home </a>
<a routerLink="/about" class="list-group-item"> About </a>
</ul>
<p>menu works!</p>
<!--Crear lista usar clases de Bootstrap-->
<ul class="list-group">
<a routerLink="/home" class="list-group-item"> Home </a>
<a routerLink="/about" class="list-group-item"> About </a>
</ul>
menu.component.tss
menú component creemos un arreglo llamado Rutas
@Component({
selector: 'app-menu',
templateUrl: './menu.component.html',
styleUrls: ['./menu.component.css']
})
export class MenuComponent implements OnInit {
rutas = [
{
name: 'Home',
path: '/home'
},
{
name: 'About',
path: '/about'
},
{
name: 'Contact',
path: '/contact'
},
];
constructor() { }
ngOnInit(): void {
}
menu.component.html
<p>menu works!</p>
<!--Crear lista usar clases de Bootstrap-->
<ul class="list-group">
<a routerLink="/home" class="list-group-item" *ngFor="let ruta of
rutas"> Home </a>
</ul>
<p>menu works!</p>
<!--Crear lista usar clases de Bootstrap-->
<ul class="list-group">
<a [routerLink]="ruta.path" class="list-group-item" *ngFor="let ruta
of rutas"> {{ruta.name}} </a>
</ul>
Modulo de paginas
app.module.ts . Tiene el menu, se va a organizar. Se creara una pagina para organizar
ng g m pages/pages --flat
Se modificara app.module.ts
@NgModule({
declarations: [
AppComponent,
//AboutComponent,
//ContactComponent,
//HomeComponent,
MenuComponent
],
imports: [
BrowserModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Modificar pages.module.ts
Antes
@NgModule({
declarations: [],
imports: [
CommonModule
]
})
export class PagesModule { }
@NgModule({
declarations: [
HomeComponent,
AboutComponent,
ContactComponent
],
exports: [
HomeComponent,
AboutComponent,
ContactComponent
],
imports: [
CommonModule
]
})
export class PagesModule { }
Ahora se debe importar el pages.module.ts, para que las aplicaciones conozca esos
componentes. El cambio en el archivo app.module.ts importar PagesModule
En el caso de agregar más páginas se lo realiza en pages.module.ts
@NgModule({
declarations: [
AppComponent,
//AboutComponent,
//ContactComponent,
//HomeComponent,
MenuComponent
],
imports: [
BrowserModule,
AppRoutingModule,
PagesModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Trabajar con Lazyload de PostsComponent
Crear carpeta en pages
posts
@NgModule({
declarations: [
PostsComponent
],
imports: [
CommonModule,
PostsRoutingModule
]
})
export class PostsModule { }
Se quiere que el módulo con su definición de la ruta, con su definición del componente, sea
cargado de manera perezosa y va a ser cargado cuando sea necesario.
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { PostsComponent } from './posts.component';
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class PostsRoutingModule { }
{
//cargar modulo
//loadChildren:'./pages/posts/posts.module#PostsModule'
path: 'posts',
loadChildren: () => import('./pages/posts/posts.module').then(m =>
m.PostsModule)
}
@NgModule({
imports: [
RouterModule.forRoot(routes)
],
exports: [
RouterModule
]
})
export class AppRoutingModule { }
{
name: 'Posts',
path: '/posts'
},
@Component({
selector: 'app-menu',
templateUrl: './menu.component.html',
styleUrls: ['./menu.component.css']
})
export class MenuComponent implements OnInit {
rutas = [
{
name: 'Home',
path: '/home'
},
{
name: 'About',
path: '/about'
},
{
name: 'Contact',
path: '/contact'
},
{
name: 'Posts',
path: '/posts'
},
];
constructor() { }
ngOnInit(): void {
}
}
Servicios y Data Externa
posts.component.html
<p>posts works!</p>
<ul class="list-group">
<li class="list-group-item">
<h2>Titulo</h2>
<p>Hola Mundo</p>
</li>
</ul>
https://jsonplaceholder.typicode.com/posts
Para consumir una data: se debe colocar en un service, el cual nos va a permitir compartir toda
esta información en todos los componentes que lo requieran.
>>ng g s services/data --skip-tests
Para importar un modulo se necesitar agregar en app.module.ts
Este módulo tiene trae lo necesario para poder hacer peticiones http y traer ese servicio.
import {HttpClientModule } from '@angular/common/http';
@NgModule({
declarations: [
AppComponent,
//AboutComponent,
//ContactComponent,
//HomeComponent,
MenuComponent
],
imports: [
BrowserModule,
AppRoutingModule,
PagesModule,
HttpClientModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
@Injectable({
providedIn: 'root'
})
export class DataService {
Ir al archivo posts.component.tss
Antes:
@Component({
selector: 'app-posts',
templateUrl: './posts.component.html',
styleUrls: ['./posts.component.css']
})
export class PostsComponent implements OnInit {
constructor() { }
ngOnInit(): void {
}
Cambios en post.component.ts
@Component({
selector: 'app-posts',
templateUrl: './posts.component.html',
styleUrls: ['./posts.component.css']
})
export class PostsComponent implements OnInit {
ngOnInit(): void {
this.dataService.getPosts().subscribe(posts => {
console.log(posts);
}
)
}
}
@Component({
selector: 'app-posts',
templateUrl: './posts.component.html',
styleUrls: ['./posts.component.css']
})
export class PostsComponent implements OnInit {
posts: any;
mensajes: any[] = [];
ngOnInit(): void {
this.dataService.getPosts()
.subscribe(res => {
this.posts = res;
for (let i = 0; i < this.posts.length; i++) {
i < 10 ? this.mensajes.push(this.posts[i]) : void (0);
console.log(this.posts);
}
});
}
}
Cambiar archivos posts.component.html
Antes
<p>posts works!</p>
<ul class="list-group">
<li *ngFor="let mensaje of mensajes" class="list-group-item">
<h2>{{mensaje.title}}</h2>
<p>
{{mensaje.body}}
</p>
</li>
</ul>
Quitar suscripción, se debe manipular los archivos:
posts.component.ts
@Component({
selector: 'app-posts',
templateUrl: './posts.component.html',
styleUrls: ['./posts.component.css']
})
export class PostsComponent implements OnInit {
//posts: any;
//mensajes: any[] = [];
mensajes: any;
constructor(private dataService: DataService) { }
ngOnInit() {
this.mensajes = this.dataService.getPosts();
}
}
posts.component
<p>posts works!</p>
<ul class="list-group">
<li *ngFor="let mensaje of mensajes | async" class="list-group-item">
<h2>{{mensaje.title}}</h2>
<p>
{{mensaje.body}}
</p>
</li>
</ul>
@Injectable({
providedIn: 'root'
})
export class DataService {
//crear un metodo
getPosts() {
return this.http.get('https://jsonplaceholder.typicode.com/posts')
.pipe(tap(console.log));
}
}