Objetivo
Proporcionar el código completo para la aplicación CRUD de tareas.
Código Completo
A continuación, se muestra el código completo para cada archivo necesario en esta aplicación.
Archivo.src/app/app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { FormsModule } from '@angular/forms';
@NgModule({
declarations.[AppComponent],
imports.[BrowserModule, IonicModule.forRoot(), AppRoutingModule, FormsModule],
providers.[{ provide.RouteReuseStrategy, useClass.IonicRouteStrategy }],
bootstrap.[AppComponent],
})
export class AppModule {}
Archivo.src/app/app-routing.module.ts
import { NgModule } from '@angular/core';
import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
const routes.Routes = [
{
path.'',
redirectTo.'tasks',
pathMatch.'full'
},
{
path.'tasks',
loadChildren.() => import('./tasks/tasks.module').then(m => m.TasksPageModule)
},
];
@NgModule({
imports.[
RouterModule.forRoot(routes, { preloadingStrategy.PreloadAllModules })
],
exports.[RouterModule]
})
export class AppRoutingModule { }
Archivo.src/app/tasks/tasks.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';
import { Routes, RouterModule } from '@angular/router';
import { TasksPage } from './tasks.page';
const routes.Routes = [
{
path.'',
component.TasksPage
}
];
@NgModule({
imports.[
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations.[TasksPage]
})
export class TasksPageModule {}
Archivo.src/app/tasks/tasks.page.ts
import { Component } from '@angular/core';
import { AlertController } from '@ionic/angular';
import { Storage } from '@capacitor/storage';
@Component({
selector.'app-tasks',
templateUrl.'./tasks.page.html',
styleUrls.['./tasks.page.scss'],
})
export class TasksPage {
newTask.string = '';
tasks.string[] = [];
constructor(private alertController.AlertController) { }
async ngOnInit() {
const { value } = await Storage.get({ key.'tasks' });
this.tasks = value ? JSON.parse(value) .[];
}
async addTask() {
if (this.newTask.trim().length === 0) {
return;
}
this.tasks.push(this.newTask);
this.newTask = '';
await Storage.set({ key.'tasks', value.JSON.stringify(this.tasks) });
}
async removeTask(index.number) {
this.tasks.splice(index, 1);
await Storage.set({ key.'tasks', value.JSON.stringify(this.tasks) });
}
async editTask(index.number) {
const alert = await this.alertController.create({
header.'Editar Tarea',
inputs.[
{
name.'task',
type.'text',
value.this.tasks[index],
placeholder.'Nueva tarea'
}
],
buttons.[
{
text.'Cancelar',
role.'cancel'
},
{
text.'Guardar',
handler.(data) => {
if (data.task.trim().length === 0) {
return;
}
this.tasks[index] = data.task;
Storage.set({ key.'tasks', value.JSON.stringify(this.tasks) });
}
}
]
});
await alert.present();
}
}
Archivo.src/app/tasks/tasks.page.html
<ion-header>
<ion-toolbar>
<ion-title>
Task Manager
</ion-title>
</ion-toolbar>
</ion-header>
<ion-content class="ion-padding">
<ion-item>
<ion-label position="floating">Nueva Tarea</ion-label>
<ion-input [(ngModel)]="newTask"></ion-input>
</ion-item>
<ion-button expand="full" (click)="addTask()">Agregar Tarea</ion-button>
<ion-list>
<ion-item *ngFor="let task of tasks; let i = index">
<ion-label>{{ task }}</ion-label>
<ion-button fill="clear" slot="end" (click)="editTask(i)">
<ion-icon name="create" slot="icon-only"></ion-icon>
</ion-button>
<ion-button fill="clear" slot="end" (click)="removeTask(i)">
<ion-icon name="trash" slot="icon-only"></ion-icon>
</ion-button>
</ion-item>
</ion-list>
</ion-content>
Capacitor Configuration
Archivo.capacitor.config.ts
import { CapacitorConfig } from '@capacitor/cli';
const config.CapacitorConfig = {
appId.'com.example.taskcrud',
appName.'Task CRUD',
webDir.'www',
bundledWebRuntime.false
};
export default config;