Heim  >  Artikel  >  Web-Frontend  >  Einfache To-Do-Listen-Anwendung in Vue.js Schritt-für-Schritt-Anleitung

Einfache To-Do-Listen-Anwendung in Vue.js Schritt-für-Schritt-Anleitung

王林
王林Original
2024-09-05 06:35:09503Durchsuche

Simple To-Do List Application in Vue.js Step-by-Step Guide

Diese Anleitung führt Sie durch die Erstellung einer einfachen To-Do-List-Anwendung mit Vue.js 3. Am Ende dieses Tutorials werden Sie verstehen, wie Sie mit Datenbindung und Ereignissen umgehen Handhabung und dynamisches Rendering in Vue.js.

Voraussetzungen

Grundkenntnisse in HTML, CSS und JavaScript.
Node.js und npm auf Ihrem Computer installiert.
Vue CLI installiert. Wenn nicht, können Sie es installieren, indem Sie npm install -g @vue/cli.

ausführen

Schritt 1: Einrichten des Projekts

Erstellen Sie ein neues Vue.js-Projekt: Öffnen Sie Ihr Terminal und führen Sie den folgenden Befehl aus, um ein neues Vue.js 3-Projekt zu erstellen:

vue create todo-app

Navigieren Sie in das Projektverzeichnis:

cd todo-app

Führen Sie den Entwicklungsserver aus: Starten Sie den Vue-Entwicklungsserver:

npm run serve

Dadurch wird die Standard-Startvorlage von Vue.js in Ihrem Browser unter http://localhost:8080 geöffnet.

Schritt 2: Strukturierung der Bewerbung

Bereinigen Sie die Standardvorlage: Öffnen Sie src/App.vue und entfernen Sie die Inhalte der Standardvorlage, des Skripts und des Stils. Ersetzen Sie sie durch den folgenden Code:

<template>
  <div id="app">
    <h1>Vue.js To-Do List</h1>
    <input v-model="newTask" placeholder="Add a new task" @keyup.enter="addTask" />
    <button @click="addTask">Add Task</button>
    <ul>
      <li v-for="(task, index) in tasks" :key="index">
        <input type="checkbox" v-model="task.completed" />
        <span :class="{ 'completed-task': task.completed }">{{ task.text }}</span>
        <button @click="removeTask(index)">Delete</button>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  name: 'App',
  data() {
    return {
      newTask: '',
      tasks: []
    };
  },
  methods: {
    addTask() {
      if (this.newTask.trim() !== '') {
        this.tasks.push({ text: this.newTask, completed: false });
        this.newTask = '';
      }
    },
    removeTask(index) {
      this.tasks.splice(index, 1);
    }
  }
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
.completed-task {
  text-decoration: line-through;
  color: grey;
}
input {
  margin-bottom: 10px;
  padding: 5px;
}
button {
  margin-left: 5px;
  padding: 5px;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 5px 0;
}
</style>

Schritt 3: Den Code verstehen

Vorlagenabschnitt:


: Dieses Eingabefeld ist mithilfe des V-Modells an die Dateneigenschaft newTask gebunden, wodurch eine bidirektionale Datenbindung ermöglicht wird. Der @keyup.enter="addTask" wartet auf die Eingabetaste, um die addTask-Methode auszulösen.


: Diese Schaltfläche löst beim Klicken die addTask-Methode aus.

    : Diese ungeordnete Liste verwendet v-for, um das Aufgabenarray zu durchlaufen und jede Aufgabe zu rendern. Der :key="index" ist eine eindeutige Kennung für jedes Element, die von Vue benötigt wird, um Listenelemente effizient zu verfolgen.

    : Ein Kontrollkästchen, das den abgeschlossenen Status einer Aufgabe umschaltet.

    {{ task.text }} : Das span-Element zeigt den Aufgabentext an. Die :class-Direktive wendet die CSS-Klasse „abgeschlossene Aufgabe“ bedingt an, je nachdem, ob die Aufgabe abgeschlossen ist.

    : Eine Schaltfläche zum Entfernen der Aufgabe aus der Liste

    Skriptabschnitt:

    data() Methode:
    newTask: Eine Zeichenfolge, die den Wert der neuen hinzuzufügenden Aufgabe enthält.
    Aufgaben: Ein Array, das alle Aufgaben enthält, die jeweils als Objekt mit Text und abgeschlossenen Eigenschaften dargestellt werden.

    Methodenobjekt:
    addTask(): Diese Methode fügt die newTask zum Aufgabenarray hinzu und löscht dann das Eingabefeld newTask.
    removeTask(index): Diese Methode entfernt eine Aufgabe basierend auf ihrem Index aus dem Aufgabenarray.

    Stilabschnitt:

    Grundlegendes CSS zum Gestalten der To-Do-Liste, mit einer .completed-task-Klasse zum Durchsuchen abgeschlossener Aufgaben.

    Aufgaben im lokalen Speicher beibehalten: Sie können die App verbessern, indem Sie Aufgaben im lokalen Speicher des Browsers speichern, sodass sie auch nach dem erneuten Laden der Seite bestehen bleiben.

    mounted() {
      this.tasks = JSON.parse(localStorage.getItem('tasks')) || [];
    },
    methods: {
      addTask() {
        if (this.newTask.trim() !== '') {
          this.tasks.push({ text: this.newTask, completed: false });
          this.newTask = '';
          localStorage.setItem('tasks', JSON.stringify(this.tasks));
        }
      },
      removeTask(index) {
        this.tasks.splice(index, 1);
        localStorage.setItem('tasks', JSON.stringify(this.tasks));
      }
    }
    

    Aufgaben bearbeiten:

    <template>
      <div id="app">
        <h1>Vue.js To-Do List</h1>
        <input v-model="newTask" placeholder="Add a new task" @keyup.enter="addTask" />
        <button @click="addTask">Add Task</button>
        <ul>
          <li v-for="(task, index) in tasks" :key="index">
            <input type="checkbox" v-model="task.completed" />
    
            <span v-if="!task.isEditing" :class="{ 'completed-task': task.completed }">{{ task.text }}</span>
            <input v-else v-model="task.text" @keyup.enter="saveTask(task)" @blur="saveTask(task)" />
    
            <button v-if="!task.isEditing" @click="editTask(task)">Edit</button>
            <button @click="removeTask(index)">Delete</button>
          </li>
        </ul>
      </div>
    </template>
    
    <script>
    export default {
      name: 'App',
      data() {
        return {
          newTask: '',
          tasks: []
        };
      },
      methods: {
        addTask() {
          if (this.newTask.trim() !== '') {
            this.tasks.push({ text: this.newTask, completed: false, isEditing: false });
            this.newTask = '';
          }
        },
        removeTask(index) {
          this.tasks.splice(index, 1);
        },
        editTask(task) {
          task.isEditing = true;
        },
        saveTask(task) {
          task.isEditing = false;
        }
      }
    };
    </script>
    
    <style>
    #app {
      font-family: Avenir, Helvetica, Arial, sans-serif;
      text-align: center;
      color: #2c3e50;
      margin-top: 60px;
    }
    .completed-task {
      text-decoration: line-through;
      color: grey;
    }
    input {
      margin-bottom: 10px;
      padding: 5px;
    }
    button {
      margin-left: 5px;
      padding: 5px;
    }
    ul {
      list-style-type: none;
      padding: 0;
    }
    li {
      display: flex;
      align-items: center;
      justify-content: center;
      margin: 5px 0;
    }
    </style>
    
    

    Installieren Sie Font Awesome

    Beziehen Sie zunächst Font Awesome in Ihr Projekt ein. Wenn Sie ein CDN verwenden, können Sie diesen Link in Ihre HTML-Datei oder direkt im Abschnitt

    Ihrer index.html einfügen.


    ** Aktualisieren Sie die Vorlage mit Symbolen
    **

    Jetzt fügen wir einige Font Awesome-Symbole zum Bearbeiten, Löschen und Erledigen von Aufgaben hinzu.

    <template>
      <div id="app" class="container">
        <h1>Vue.js To-Do List</h1>
        <div class="input-container">
          <input v-model="newTask" placeholder="Add a new task" @keyup.enter="addTask" />
          <button @click="addTask" class="btn btn-add"><i class="fas fa-plus"></i></button>
        </div>
        <ul>
          <li v-for="(task, index) in tasks" :key="index" :class="{ completed: task.completed }">
            <input type="checkbox" v-model="task.completed" id="checkbox" />
    
            <span v-if="!task.isEditing" class="task-text">{{ task.text }}</span>
            <input v-else v-model="task.text" @keyup.enter="saveTask(task)" @blur="saveTask(task)" class="edit-input" />
    
            <div class="actions">
              <button v-if="!task.isEditing" @click="editTask(task)" class="btn btn-edit"><i class="fas fa-edit"></i></button>
              <button @click="removeTask(index)" class="btn btn-delete"><i class="fas fa-trash-alt"></i></button>
            </div>
          </li>
        </ul>
      </div>
    </template>
    
    <script>
    export default {
      name: 'App',
      data() {
        return {
          newTask: '',
          tasks: []
        };
      },
      methods: {
        addTask() {
          if (this.newTask.trim() !== '') {
            this.tasks.push({ text: this.newTask, completed: false, isEditing: false });
            this.newTask = '';
          }
        },
        removeTask(index) {
          this.tasks.splice(index, 1);
        },
        editTask(task) {
          task.isEditing = true;
        },
        saveTask(task) {
          task.isEditing = false;
        }
      }
    };
    </script>
    
    <style>
    body {
      background-color: #f4f7f6;
      font-family: 'Roboto', sans-serif;
      margin: 0;
      padding: 0;
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
    }
    
    .container {
      background-color: #ffffff;
      border-radius: 10px;
      box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
      padding: 20px;
      max-width: 400px;
      width: 100%;
    }
    
    h1 {
      color: #333;
      margin-bottom: 20px;
    }
    
    .input-container {
      display: flex;
      margin-bottom: 20px;
    }
    
    input {
      flex: 1;
      padding: 10px;
      border: 1px solid #ccc;
      border-radius: 5px;
      font-size: 16px;
    }
    
    .btn {
      background-color: #4caf50;
      color: white;
      border: none;
      padding: 10px;
      border-radius: 5px;
      cursor: pointer;
      margin-left: 5px;
      transition: background-color 0.3s;
    }
    
    .btn:hover {
      background-color: #45a049;
    }
    
    .btn-add {
      background-color: #28a745;
    }
    
    .btn-edit {
      background-color: #ffc107;
    }
    
    .btn-delete {
      background-color: #dc3545;
    }
    
    ul {
      list-style-type: none;
      padding: 0;
    }
    
    li {
      display: flex;
      justify-content: space-between;
      align-items: center;
      margin-bottom: 10px;
      padding: 10px;
      border-radius: 5px;
      background-color: #f8f9fa;
    }
    
    li.completed .task-text {
      text-decoration: line-through;
      color: #888;
    }
    
    li:hover {
      background-color: #e9ecef;
    }
    
    .actions {
      display: flex;
    }
    
    .actions .btn {
      margin-left: 5px;
    }
    
    .edit-input {
      flex: 1;
      margin-right: 10px;
    }
    </style>
    
    

    Das obige ist der detaillierte Inhalt vonEinfache To-Do-Listen-Anwendung in Vue.js Schritt-für-Schritt-Anleitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn