Skip to content

Commit 1213779

Browse files
committed
Initial commit
0 parents commit 1213779

File tree

1 file changed

+183
-0
lines changed

1 file changed

+183
-0
lines changed

README.md

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
# Rutas en Angular
2+
3+
Proyecto generado con [Angular CLI](https://github.com/angular/angular-cli) version 1.0.0-rc.0.
4+
5+
Aplicación para establecer criterios sobre las rutas anidadadas.
6+
Se utiliza:
7+
<ul>
8+
<li>Routing (programática y declarativa)</li>
9+
<li>Nested Routing</li>
10+
<li>Lazy-loading</li>
11+
<li>Angular Material</li>
12+
<li>Compodoc</li>
13+
<li>Comunicación entre componentes</li>
14+
<li>Interface</li>
15+
<li>Directivas estructurales</li>
16+
<ul><li>ngIf-else</li> <li>ngFor</li> <li>ngSwitch</li></ul>
17+
</ul>
18+
19+
## Demo
20+
Desplegada en firebase [aquí] (https://colores-d5ee3.firebaseapp.com/)
21+
22+
<p align="center">
23+
<span><img src="screenshots/demo.gif" width="430px"/></span>
24+
</p>
25+
26+
27+
## Navegación entre componentes
28+
29+
En esta aplicación se define un componente padre (se utiliza el app.component) y hijos (RedComponent, BlueComponent y GreenComponent. El app.component dispondrá de un router-outlet para cargarlos. Se cargan con lazy-loading en este caso (se explica a continuación)
30+
31+
```bash
32+
{ path: 'blue', loadChildren: 'app/blue/blue.module#BlueModule' },
33+
{ path: 'red', loadChildren: 'app/red/red.module#RedModule' },
34+
{ path: 'green', loadChildren: 'app/green/green.module#GreenModule' }
35+
```
36+
Cada uno de los componentes tiene otros 3 hijos
37+
<ul>
38+
<li>BlueComponent:
39+
<ul>
40+
<li>BlueComponentLight</li>
41+
<li>BlueComponentMedium</li>
42+
<li>BlueComponentDark</li>
43+
</ul>
44+
</li>
45+
<li>RedComponent:
46+
<ul>
47+
<li>RedComponentLight</li>
48+
<li>RedComponentMedium</li>
49+
<li>RedComponentDark</li>
50+
</ul>
51+
</li>
52+
<li>GreenComponent:
53+
<ul>
54+
<li>GreenComponentLight</li>
55+
<li>GreenComponentMedium</li>
56+
<li>GreenComponentDark</li>
57+
</ul>
58+
</li>
59+
</ul>
60+
61+
Las sub-rutas para Redcomponent se definen de la siguiente forma:
62+
```bash
63+
const routes: Routes = [
64+
{
65+
// Los componentes contenedores (RedComponent) necesitan tener un router-outlet para cargar sus hijos
66+
path: '', component: RedComponent,
67+
children: [
68+
// los componentes de las rutas hijas se renderizarán en el router-outlet definido siempre en el componente contenedor
69+
{ path: 'light', component: RedLightComponent },
70+
{ path: 'medium', component: RedMediumComponent },
71+
{ path: 'dark', component: RedDarkComponent },
72+
// cuando pongan en el navegador pongan localhost:8080/red/ cargará el RedComponent ya que así lo mapeamos con el path ''
73+
// y en su router-routlet renderizará el dark por defecto, ya que con el path '' redireccionamos a /red/dark
74+
{ path: '', redirectTo: 'dark', pathMatch: 'full'}
75+
]
76+
}
77+
```
78+
79+
Así queda el mapa de navegación (extensión Augury)
80+
81+
<p align="center">
82+
<span><img src="screenshots/tree-augury.png" width="450px"/></span>
83+
</p>
84+
85+
86+
## Links (routerLink)
87+
Las rutas pueden ir precedidas de /, ../ o nada. Establece la url.
88+
89+
Prefijos:
90+
<ul>
91+
<li>'/'Añade la ruta a la raíz de la aplicación</li>
92+
<li>''añade la ruta a partir del componente contenedor </li>
93+
<li>'../'añade ruta a la url a partir del componente padre del componente contenedor </li>
94+
</ul>
95+
96+
Ejemplo:
97+
partiendo que la ruta para el componente contenedor es http://my-server/../componenteContenedor/
98+
99+
100+
```bash
101+
<a [routerLink]="['route-one']">Route One</a> -> http://my-server/../componenteContenedor/route-one
102+
<a [routerLink]="['../route-two']">Route Two</a> -> http://my-server/../route-two
103+
<a [routerLink]="['/route-three']">Route Three</a> ->http://my-server/route-three
104+
```
105+
106+
## Lazy-Loading
107+
Los módulos son cargados dinámicasmente. Se genera bundle (chunks) de cada uno y se cargan bajo demanda
108+
Módulos red, blue, green cargados mediante lazy-loading ({ path: 'path', loadChildren: 'lazy-path#lazy-module' },)
109+
110+
```bash
111+
{ path: 'blue', loadChildren: 'app/blue/blue.module#BlueModule' },
112+
{ path: 'red', loadChildren: 'app/red/red.module#RedModule' },
113+
{ path: 'green', loadChildren: 'app/green/green.module#GreenModule' }
114+
```
115+
116+
<p align="center">
117+
<span><img src="screenshots/lazy-loading.gif" width="750px"/></span>
118+
</p>
119+
120+
En el gráfico se pueden ver los chunk, al recargar la aplicación se cargan los bundles y el '2.chunk.js' que se corresponde con el bundle para el módulo por defecto (blue.module). Al pulsar sobre 'red' se carga 0.chunk.js que se corresponde con el bundle del módulo 'red.module' y al pulsar sobre 'green' se carga el 1.chunk.js (green.module)
121+
122+
## Angular Material
123+
Se utiliza Angular Material para las templates.
124+
125+
Instalar angular material
126+
```bash
127+
npm install --save @angular/material
128+
```
129+
Instalar modulo de animaciones, algún componente de AM lo utiliza en transiciones
130+
```bash
131+
npm install --save @angular/animation
132+
```
133+
134+
Importar módulo de material en principal y modulo de animaciones:
135+
```bash
136+
imports: [
137+
BrowserModule,
138+
FormsModule,
139+
HttpModule,
140+
RouterModule.forRoot(routes),
141+
MaterialModule.forRoot(),
142+
BrowserAnimationsModule
143+
]
144+
```
145+
Importar en css uno de los temas del prebuilt y la material icons . Para ello en styles.css
146+
147+
```bash
148+
@import '~https://fonts.googleapis.com/icon?family=Material+Icons';
149+
@import '~@angular/material/prebuilt-themes/deeppurple-amber.css';
150+
```
151+
152+
## Documentación
153+
Ver Documentacion de la aplicación [aquí] (https://colores-d5ee3.firebaseapp.com/documentation/)
154+
155+
Se utiliza [compodoc](https://compodoc.github.io/website/)
156+
157+
### Generar documentación
158+
Instalación global
159+
```bash
160+
npm install -g @compodoc/compodoc
161+
```
162+
Instalación local
163+
```bash
164+
npm install --save-dev @compodoc/compodoc
165+
```
166+
Definir script en package.json (se añade -a screenshots para llevar la carpeta de screenshots al generado, y el theme)
167+
```bash
168+
"scripts": {
169+
"compodoc": "./node_modules/.bin/compodoc -p tsconfig.json -a screenshots"
170+
}
171+
```
172+
Lanzar script
173+
```bash
174+
npm run compodoc
175+
```
176+
Se genera carpeta /documentation
177+
178+
## Deploy firebase
179+
Se crea script en el package.json que borra /dist, genera el build para prod, documentación y despliega en firebase
180+
181+
```bash
182+
"deploy-firebase": "del dist && ng build --env=prod --aot && npm run compodoc && move documentation dist && firebase deploy"
183+
```

0 commit comments

Comments
 (0)