Angular Material
Angular Material
Angular Material es un conjunto de módulos y componentes que facilita el desarrollo de un proyecto Angular. Proporciona distintos tipos de componentes testeados y desarrollados por el equipo de Angular y dispone de componentes y módulos que, una vez implementados facilitan la reutilización de código y se comportan correctamente en las distintas resoluciones. Para la instalación de Angular Material es necesario instalar las dependencias, importar el módulo BrowserAnimationsModule y añadir los estilos.
INSTALAR ANGULAR MATERIAL
npm install @angular/material @angular/cdk --save
npm install @angular/animations --save
Importar módulo BrowserAnimationsModule en app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import {BrowserAnimationsModule} from "@angular/platform-browser/animations";
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
BrowserAnimationsModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Añadir estilos de iconos con Angular Material
Añadiendo enlace externo de estilos en index.html de Material Icons
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Edproyecto</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link href="//fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>
<ed-root></ed-root>
</body>
</html>
Añadir tema en styles.css
/*@import "~@angular/material/prebuilt-themes/indigo-pink.css";*/
@import "~@angular/material/prebuilt-themes/deeppurple-amber.css";
A continuación distintos módulos de Angular Material.
MATTOOLBAR
El módulo MatToolbar es un módulo Angular que permite insertar una barra de herramientas con un conjunto de características que ofrece Angular Material. Para poder disponer del módulo solo es necesario importar el módulo correspondiente, tal como se muestra en el siguiente código.
import {MatToolbarModule } from "@angular/material";
@NgModule({
imports: [ MatToolbarModule ],
declarations: [ ],
exports: [ MatToolbarModule ]
})
export class MaterialModule { }
Para poder instanciar un MatToolbar es necesario indicar el selector correspondiente desde el componente Angular.
Ejemplo: material.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import {BrowserModule} from "@angular/platform-browser";
import {MatToolbarModule } from "@angular/material";
@NgModule({
imports: [
CommonModule,MatToolbarModule
],
declarations: [ ],
exports: [MatToolbarModule ]
})
export class MaterialModule { }
Ejemplo: app.component.html
<mat-toolbar color="primary">
<span>Angular</span>
</mat-toolbar>
<router-outlet></router-outlet>
MATBUTTON Y MATICON
MatButton y MatIcon son módulos Angular, uno para botones y otro para iconos. De la misma manera que MatToolbar, es necesario añadir al módulo las lineas correspondientes de dichos módulos para disponer de ellos.
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import {BrowserModule} from "@angular/platform-browser";
import {MatToolbarModule, MatButtonModule,MatIconModule } from "@angular/material";
import { MaterialDemoComponent } from './material-demo/material-demo.component';
@NgModule({
imports: [
CommonModule,
MatToolbarModule,MatButtonModule,MatIconModule
],
declarations: [ MaterialDemoComponent ],
exports: [MatToolbarModule,MatButtonModule,MatIconModule ]
})
export class MaterialModule { }
Desde el componente html añadimos los selectores
<mat-toolbar color="primary">
<button mat-icon-button type="button">
<a href="/"><mat-icon>restaurant_menu</mat-icon></a>
</button>
<span>Angular</span>
</mat-toolbar>
<nav>
<a href="material-demo" >
<button type="" mat-button color="primary">
Home
</button>
</a>
</nav>
<router-outlet></router-outlet>
Angular Material ofrece al usuario una gran variedad de iconos desde Material Design Icons
RUTAS BÁSICAS EN ANGULAR
Las rutas se manejan en el archivo app-routing.module.ts. En este archivo debemos importar los componentes necesarios al inicio del archivo y añadirlos en la constante "routes". De esta forma desde cualquier enlace o botón es posible acceder a otro componente.
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { MaterialDemoComponent } from './material/material-demo/material-demo.component';
//import { NuevoComponent } from "rutaNuevoComponent";
const routes: Routes = [
{
path: 'material-demo',
component: MaterialDemoComponent,
}
/*,{
path:selector NuevoComponent,
component: NuevoComponent
}*/
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
Para poder redireccionar y evitar la duplicidad del componente es necesario sustituir la propiedad "redirectTo" junto "pathMatch" en lugar de la propiedad component.
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { MaterialDemoComponent } from './material/material-demo/material-demo.component';
//import { NuevoComponent } from "rutaNuevoComponent";
const routes: Routes = [
{
path:"", //raíz del proyecto
redirectTo: "material-demo",
pathMatch: "full"
},
{
path: 'material-demo',
component: MaterialDemoComponent,
}
/*,{
path: selector NuevoComponent,
component: NuevoComponent
}*/
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
Todas estas rutas con accesibles desde cualquier componente mediante la propiedad [routerLink] que permite redireccionar a la ruta asignada.
<button [routerLink] = "home">Home</button>
EXPANSION PANEL
Expansion Panel es un componente "Angular Material" que actúa como un contenedor expansible y que está compuesto por un header y opcionalmente por un actionbar. Es necesario importar desde el módulo correspondiente(archivo typescript) , el módulo de Expansion Panel y añadirlo dentro del NgModule en la sección imports y, en caso necesario, en la sección exports.
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import {BrowserModule} from "@angular/platform-browser";
import {MatToolbarModule, MatButtonModule,MatIconModule,MatExpansionModule } from "@angular/material";
import { MaterialDemoComponent } from './material-demo/material-demo.component';
@NgModule({
imports: [
CommonModule,
MatToolbarModule,MatButtonModule,MatIconModule,MatExpansionModule
],
declarations: [ MaterialDemoComponent ],
exports: [MatToolbarModule,MatButtonModule,MatIconModule,MatExpansionModule]
})
export class MaterialModule { }
Ejemplo de selectores con Expansion Panel en el html.
<mat-expansion-panel>
<mat-expansion-panel-header>
<mat-panel-title>
Título
</mat-panel-title>
</mat-expansion-panel-header>
</mat-expansion-panel>
BUTTONS
Angular Material dispone de varios tipos de botones predefinidos. Estos botones se obtienen añadiendo alguno de los atributos que Angular Material proporciona y que se pueden revisar en la documentación: Botones Angular Material. En el caso de los iconos Angular Material dispone de un componente (mat-icon)que permite añadir iconos de forma rápida desde Iconos Material Design , para ello es necesario incluir el módulo Material Icon de la misma forma que Expansion Panel detallado anteriormente.
BOTONES ESTÁNDAR
<div>
<button mat-button>Normal</button>
<button mat-button color="primary">Normal Primario</button>
</div>
BOTONES ELEVADOS
<div>
<button mat-raised-button>Elevado</button>
<button mat-raised-button color="primary">Elevado
Primario</button>
</div>
BOTONES CON ICONOS
<div>
<button mat-icon-button>
<mat-icon>grade</mat-icon>
</button>
<button mat-icon-button color="primary">
<mat-icon>grade</mat-icon>
</button>
</div>
BOTONES FLOTANTES CON ICONOS (FAB)
<div>
<button mat-fab>
<mat-icon>grade</mat-icon>
</button>
<button mat-fab color="primary">
<mat-icon>add</mat-icon>
</button>
</div>
INPUTS
Al igual que los botones, Angular Material dispone de distintos tipos de campos de texto que permite cambiar el estilo haciendo uso del componente (mat-form-field) y añadiendo alguna de las directivas de Angular Material en el input. Es necesario incluir el módulo Input como los anteriores módulos.
INPUT ESTÁNDAR
<div>
<mat-form-field>
<input matInput type="text" placeholder="Nombre">
</mat-form-field>
</div>
INPUT CON PREFIJO Y SUFIJO
<div>
<mat-form-field>
<span matPrefix>+34 </span>
<input matInput type="text" placeholder="Teléfono">
<span matSuffix>:-)</span>
</mat-form-field>
</div>
INPUT CON INDICACIÓN
<div>
<mat-form-field>
<input matInput type="text" placeholder="Dirección">
<mat-hint>Calle y Número</mat-hint>
</mat-form-field>
</div>
LISTS
Otro de los componentes disponibles en Angular Material son las listas (mat-list) y los elementos de lista (mat-list-item). Recomendable uso de directiva (mat-line o matLine) sobre list-item de múltiples líneas. Como el resto de componentes es necesario importar módulo List desde el archivo typescript.
Para poder comentar es necesario iniciar sesión