Paso 10.CRUD-Código Completo

HOME

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;