Otra etiqueta común en un formulario son los mat-select que provee la misma funcionalidad de la etiqueta nativa de HTML <select"> pero con las ventajas de estilos y animaciones de Material Design.
Definir un formulario web que permita cargar dos valores numéricos y mediante una componente 'mat-select' indicar si queremos sumar, restar, multiplicar o dividir los valores ingresados. Efectuar la operación al presionar un botón.
Crearemos primero el proyecto
ng new proyecto023
Procedemos a instalar todas las dependencias de Angular Material ayudados por Angular CLI mediante el comando 'add':
ng add @angular/material
Modificamos el archivo 'app.module.ts' donde debemos importar los módulos de Angular Material que requiere nuestro proyecto:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { FormsModule } from '@angular/forms';
import { MatInputModule } from '@angular/material/input';
import { MatButtonModule } from '@angular/material/button';
import {MatFormFieldModule} from '@angular/material/form-field';
import { MatSelectModule } from '@angular/material/select';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
BrowserAnimationsModule,
FormsModule,
MatInputModule,
MatButtonModule,
MatFormFieldModule,
MatSelectModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Como vemos aparece el nuevo módulo MatSelectedModule.
Modificamos el archivo 'app.component.ts' con la lógica de nuestra componente que permita operar los dos valores ingresados dependiendo de la selección del mat-select:
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
valor1!:number;
valor2!:number;
resultado!:number;
operaciones = [
{valor:'suma', muestraValor:'Sumar'},
{valor:'resta', muestraValor:'Restar'},
{valor:'multiplicacion', muestraValor:'Multiplicar'},
{valor:'division', muestraValor:'Dividir'}
];
seleccionada: string = this.operaciones[0].valor;
operar() {
switch (this.seleccionada) {
case 'suma' : this.resultado = this.valor1 + this.valor2;
break;
case 'resta' : this.resultado = this.valor1 - this.valor2;
break;
case 'multiplicacion' : this.resultado = this.valor1 * this.valor2;
break;
case 'division' : this.resultado = this.valor1 / this.valor2;
break;
}
}
}
Codificamos la interfaz visual en el archivo 'app.component.html':
<div class="contenedor">
<mat-form-field>
<input matInput [(ngModel)]="valor1" type="number" placeholder="Ingrese primer valor">
</mat-form-field>
<mat-form-field>
<input matInput [(ngModel)]="valor2" type="number" placeholder="Ingrese segundo valor">
</mat-form-field>
<mat-form-field>
<mat-select placeholder="Operaciones" [(ngModel)]="seleccionada" name="operacion">
<mat-option *ngFor="let op of operaciones" [value]="op.valor">
{{op.muestraValor}}
</mat-option>
</mat-select>
</mat-form-field>
<button mat-raised-button color="primary" (click)="operar()">Operar</button>
<p>El resultado es:{{resultado}}</p>
</div>
El último archivo que debemos codificar es la hoja de estilo de la componente que se encuentra en 'app.component.css':
.contenedor {
display: flex;
flex-direction: column;
margin:1rem auto;
max-width: 600px;
}
Si ejecutamos ahora la aplicación podemos comprobar cual es la estética de la componente mat-select:

Podemos probar esta aplicación en la web aquí.
En el archivo 'app.component.html' definimos el selector 'mat-select' contenido dentro de un mat-form-field:
<mat-form-field>
<mat-select placeholder="Operaciones" [(ngModel)]="seleccionada" name="operacion">
<mat-option *ngFor="let op of operaciones" [value]="op.valor">
{{op.muestraValor}}
</mat-option>
</mat-select>
</mat-form-field>
En el archivo 'app.component.ts' definimos un vector que almacena cuatro objetos indicando el valor a mostrar dentro de la componente mat-select y el valor asociado a dicha opción:
operaciones = [
{valor:'suma', muestraValor:'Sumar'},
{valor:'resta', muestraValor:'Restar'},
{valor:'multiplicacion', muestraValor:'Multiplicar'},
{valor:'division', muestraValor:'Dividir'}
];
seleccionada: string = this.operaciones[0].valor;
El atributo 'seleccionada' almacena el valor por defecto que debe mostrarse seleccionado dentro del mat-select.
En el archivo 'app.module.ts' importamos todos los módulos necesarios para trabajar con este formulario de Material:
import { FormsModule } from '@angular/forms';
import { MatInputModule } from '@angular/material/input';
import { MatButtonModule } from '@angular/material/button';
import {MatFormFieldModule} from '@angular/material/form-field';
import { MatSelectModule } from '@angular/material/select';