初识Vue-组件化开发(应用实例)

目录

一、任务管理应用

1.介绍

2.代码

1. 任务列表组件 (TaskList.vue)

2. 添加任务组件 (AddTask.vue)

3. 应用入口组件 (App.vue)

4. 主入口文件 (main.js)

 3.效果

4.总结

二、购物车

1.介绍

2.代码

1. 商品列表组件 (ProductList.vue)

2. 购物车组件 (Cart.vue)

3. 主应用组件 (App.vue)

3.总结

三、在线笔记开发应用

1.介绍

2.代码

1. 笔记列表组件 (NoteList.vue)

2. 添加/编辑笔记模态框组件 (NoteModal.vue)

3. 主应用组件 (App.vue)

3.总结


一、任务管理应用

1.介绍

开发一个简单的任务管理应用,其中包含任务列表和添加任务的功能。我们可以使用 Vue.js 来构建这个应用,并将其组件化。

2.代码

1. 任务列表组件 (TaskList.vue)
<template>
  <div>
    <h2>任务列表</h2>
    <ul>
      <li v-for="(task, index) in tasks" :key="index">{{ task }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  props: {
    tasks: Array // 接收任务数组
  }
}
</script>
2. 添加任务组件 (AddTask.vue)
<template>
  <div>
    <input type="text" v-model="newTask" placeholder="输入新任务">
    <button @click="addTask">添加任务</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      newTask: '' // 存储新任务
    }
  },
  methods: {
    addTask() {
      if (this.newTask.trim() !== '') {
        this.$emit('add', this.newTask); // 发送新任务到父组件
        this.newTask = ''; // 清空输入框
      }
    }
  }
}
</script>
3. 应用入口组件 (App.vue)
<template>
  <div>
    <task-list :tasks="tasks"></task-list>
    <add-task @add="addTask"></add-task>
  </div>
</template>

<script>
import TaskList from './components/TaskList.vue';
import AddTask from './components/AddTask.vue';

export default {
  components: {
    TaskList,
    AddTask
  },
  data() {
    return {
      tasks: ['完成Vue.js教程', '开始构建应用']
    }
  },
  methods: {
    addTask(task) {
      this.tasks.push(task); // 添加新任务到任务列表
    }
  }
}
</script>
4. 主入口文件 (main.js)
import Vue from 'vue';
import App from './App.vue';

new Vue({
  render: h => h(App)
}).$mount('#app');

 3.效果

初始效果

使用效果

4.总结

在这个示例中,我们创建了一个简单的任务管理应用。任务列表组件用于显示任务列表,添加任务组件用于添加新任务。在应用入口组件中,我们将这两个组件组合在一起,并通过 props 和事件进行通信。通过这种方式,我们实现了组件化开发,使得应用的各个功能模块独立、可重用和易于维护。

二、购物车

1.介绍

  1. 显示商品列表
  2. 将商品添加到购物车
  3. 显示购物车中的商品列表
  4. 计算购物车中商品的总价

2.代码

1. 商品列表组件 (ProductList.vue)
<template>
  <div>
    <h2>商品列表</h2>
    <ul>
      <li v-for="product in products" :key="product.id">
        {{ product.name }} - ¥{{ product.price }}
        <button @click="addToCart(product)">添加到购物车</button>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      products: [
        { id: 1, name: 'iPhone', price: 999 },
        { id: 2, name: 'iPad', price: 799 },
        { id: 3, name: 'MacBook', price: 1299 }
      ]
    };
  },
  methods: {
    addToCart(product) {
      this.$emit('add-to-cart', product);
    }
  }
};
</script>
2. 购物车组件 (Cart.vue)
<template>
  <div>
    <h2>购物车</h2>
    <ul>
      <li v-for="item in cart" :key="item.product.id">
        {{ item.product.name }} - ¥{{ item.product.price }} x {{ item.quantity }}
      </li>
    </ul>
    <p>Total: ¥{{ total }}</p>
  </div>
</template>

<script>
export default {
  props: {
    cart: Array
  },
  computed: {
    total() {
      return this.cart.reduce((total, item) => total + (item.product.price * item.quantity), 0);
    }
  }
};
</script>
3. 主应用组件 (App.vue)
<template>
  <div>
    <product-list @add-to-cart="addToCart"></product-list>
    <cart :cart="cart"></cart>
  </div>
</template>

<script>
import ProductList from './components/ProductList.vue';
import Cart from './components/Cart.vue';

export default {
  components: {
    ProductList,
    Cart
  },
  data() {
    return {
      cart: []
    };
  },
  methods: {
    addToCart(product) {
      const existingItem = this.cart.find(item => item.product.id === product.id);
      if (existingItem) {
        existingItem.quantity++;
      } else {
        this.cart.push({ product, quantity: 1 });
      }
    }
  }
};
</script>

3.总结

在这个应用中,我们将商品列表和购物车拆分成两个单独的组件,并使用 props 和事件来进行通信。主应用组件 App.vue 作为整个应用的入口,负责管理购物车状态,并将商品列表和购物车组件组合在一起。

三、在线笔记开发应用

1.介绍

  1. 显示笔记列表
  2. 添加新笔记
  3. 编辑笔记
  4. 删除笔记

2.代码

1. 笔记列表组件 (NoteList.vue)
<template>
  <div>
    <h2>笔记列表</h2>
    <ul>
      <li v-for="note in notes" :key="note.id">
        {{ note.title }}
        <button @click="editNote(note)">编辑</button>
        <button @click="deleteNote(note.id)">删除</button>
      </li>
    </ul>
    <button @click="showAddNoteModal">添加笔记</button>
  </div>
</template>

<script>
export default {
  props: {
    notes: Array
  },
  methods: {
    editNote(note) {
      this.$emit('edit-note', note);
    },
    deleteNote(noteId) {
      this.$emit('delete-note', noteId);
    },
    showAddNoteModal() {
      // 显示添加笔记的模态框
    }
  }
};
</script>
2. 添加/编辑笔记模态框组件 (NoteModal.vue)
<template>
  <div v-if="showModal">
    <h2>{{ modalTitle }}</h2>
    <input type="text" v-model="noteTitle">
    <textarea v-model="noteContent"></textarea>
    <button @click="saveNote">保存</button>
    <button @click="closeModal">取消</button>
  </div>
</template>

<script>
export default {
  props: {
    showModal: Boolean,
    modalTitle: String,
    noteTitle: String,
    noteContent: String
  },
  methods: {
    saveNote() {
      this.$emit('save-note', { title: this.noteTitle, content: this.noteContent });
      this.closeModal();
    },
    closeModal() {
      this.$emit('close-modal');
    }
  }
};
</script>
3. 主应用组件 (App.vue)
<template>
  <div>
    <note-list :notes="notes" @edit-note="editNote" @delete-note="deleteNote"></note-list>
    <note-modal :show-modal="showModal" :modal-title="modalTitle" :note-title="noteTitle" :note-content="noteContent"
                @save-note="saveNote" @close-modal="closeModal"></note-modal>
  </div>
</template>

<script>
import NoteList from './components/NoteList.vue';
import NoteModal from './components/NoteModal.vue';

export default {
  components: {
    NoteList,
    NoteModal
  },
  data() {
    return {
      notes: [],
      showModal: false,
      modalTitle: '',
      noteTitle: '',
      noteContent: ''
    };
  },
  methods: {
    editNote(note) {
      this.showModal = true;
      this.modalTitle = '编辑笔记';
      this.noteTitle = note.title;
      this.noteContent = note.content;
    },
    deleteNote(noteId) {
      // 根据 noteId 删除笔记
    },
    saveNote(noteData) {
      // 保存笔记数据
      this.closeModal();
    },
    closeModal() {
      this.showModal = false;
      this.modalTitle = '';
      this.noteTitle = '';
      this.noteContent = '';
    }
  }
};
</script>

3.总结

  1. 用户身份认证:允许用户注册账号并登录,以便他们可以保存和管理自己的笔记。

  2. 笔记管理:用户可以创建、查看、编辑和删除笔记。每个笔记包括标题、内容、创建时间和最后修改时间等信息。

  3. 笔记分类:用户可以为笔记添加标签或分类,以便更好地组织和管理笔记。

  4. 搜索功能:提供搜索功能,使用户可以快速查找到需要的笔记。搜索可以根据标题、内容、标签等进行过滤。

  5. 实时同步:支持多端同步,用户在任意设备上创建或编辑的笔记会自动同步到其他设备上。

  6. 安全性:保护用户数据的安全,使用加密技术存储用户的账号信息和笔记内容,确保用户隐私不被泄露。

  7. 用户体验:界面简洁友好,操作简单直观,提供良好的用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/588471.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

医疗大模型华佗GPT-2:医学问答超越GPT-4,通过2023年国家执业药师考试

前言 随着人工智能技术的快速发展&#xff0c;特别是在自然语言处理(NLP)领域&#xff0c;大型预训练模型如GPT系列已经显示出在多个领域的强大应用潜力。最近&#xff0c;华佗GPT-2医疗大模型的发布&#xff0c;不仅标志着人工智能在医学领域的一大进步&#xff0c;更是在202…

国产服务器操作系统部署NTP服务 _ 统信UOS _ 麒麟 _ 中科方德

原文链接&#xff1a;国产服务器操作系统部署NTP服务 | 统信UOS | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;在保持服务器时间的精确同步方面&#xff0c;时间同步服务器&#xff08;NTP服务器&#xff09;扮演着至关重要的角色&#xff0c;它能确保系统操作的时…

小程序商城|基于Spring Boot的智能小程序商城的设计与实现(源码+数据库+文档)

小程序商城目录 目录 基于Spring Boot的智能小程序商城 一、前言 二、系统设计 三、系统功能设计 1用户信息管理 2 商品信息管理 3公告信息管理 4论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; …

LeetCode 面试题 17.14 —— 最小 k 个数

阅读目录 1. 题目2. 解题思路一3. 代码实现一4. 解题思路二5. 代码实现二 1. 题目 2. 解题思路一 第一种方法就是利用快速排序&#xff0c;第一次排序后&#xff0c;数组被划分为了左右两个区间 [ 0 , i ] , [ i 1 , a r r . s i z e ( ) − 1 ] [0, i], [i1, arr.size()-1]…

Windows下载MingGW

因为要配置vscode的c/c环境&#xff0c;需要下载一个编译器&#xff0c;gcc官方推荐开源的MingGW-W64&#xff0c;看了几个下载方法&#xff0c;决定用最简单的离线安装。 niXman/mingw-builds-binaries/releases 32位的操作系统&#xff1a;i686&#xff0c;64位的操作系统&a…

画渐变色的圆弧练习

import sysfrom PySide6.QtCore import QPointF from PySide6.QtWidgets import * from PySide6.QtGui import *class MyWidget(QWidget):def paintEvent(self, event):painter QPainter(self) # 设定画板painter.setRenderHint(QPainter.Antialiasing) # 抗锯齿size min(s…

Rust Turbofish 的由来

0x01 什么是 Turbofish 我们运行如下 Rust Snippet&#xff1a; fn main() {let numbers: Vec<i32> vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];let even_numbers numbers.into_iter().filter(|n| n % 2 0).collect();println!("{:?}", even_numbers); }不出意…

在线听歌播放器 梨花带雨网页音乐播放器 网页音乐在线听 源码

最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 下 载 地 址 &#xff1a; runruncode.com/php/19749.html 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容&#xff1a;修复播放器接口问题&am…

Java零基础入门到精通_Day 11

1.继承 定义&#xff1a; 继承是面向对象三大特征之一。可以使得子类具有父类的属性和方法&#xff0c;还可以在子类中重新定义&#xff0c;追加属性和方法 格式&#xff1a; public class 子类 extends 父类{} 子类&#xff1a;也叫派生类 父类&#xff1a;基类/超类 继…

【c++】反向迭代器的探究实现

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 在list中我们实现了正向的迭代器&#xff0c;学习完优先级队列后&#xff0c;我们也对适配器模式有了一个深刻的理解&#xff0c;这篇文章基于这种模式下&#xff0c;实现各类容器的反向迭…

【论文阅读笔记】TS2Vec: Towards Universal Representation of Time Series

【论文阅读笔记】TS2Vec: Towards Universal Representation of Time Series 摘要 这段文字介绍了一个名为TS2Vec的通用框架&#xff0c;用于学习时间序列数据的表示&#xff0c;可以在任意语义层次上进行。与现有方法不同&#xff0c;TS2Vec通过对增强的上下文视图进行层次化…

【论文阅读:Towards Efficient Data Valuation Based on the Shapley Value】

基于Shapley值的高校数据价值评估 主要贡献 提出了一系列用于近似计算Shapley值的高效算法。设计了一个算法&#xff0c;通过实现不同模型评估之间的适当信息共享来实现这一目标,该算法具有可证明的误差保证来近似N个数据点的SV&#xff0c;其模型评估数量为 O ( N l o g ( N…

Typora配置PicGo图床,将图片文件上传到gitee厂库,获取图片链接显示在md文件中

Typora配置PicGo图床&#xff0c;将图片文件上传到gitee厂库&#xff0c;获取图片链接显示在md文件中 创建Gitee创库和配置私人令牌 名字、路径、描述自己随便添&#xff0c;但是必须开源&#xff0c;链接才能可以访问&#xff1a; 进入偏好设置 > 图像 > 选择PicGo-Cor…

CAS 与 volatile

目录 CAS volatile 为什么无锁效率高 CAS 的特点 CAS AtomicInteger 内部并没有用锁来保护共享变量的线程安全。那么它是如何实现的呢&#xff1f; public void withdraw(Integer amount) {while(true) {// 需要不断尝试&#xff0c;直到成功为止while (true) {// 比如拿到…

基于Springboot+Vue的Java项目-入校申报审批系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

算法入门<一>:C++各种排序算法详解及示例源码

1、排序算法 排序算法&#xff08;sorting algorithm&#xff09;用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用&#xff0c;因为有序数据通常能够被更高效地查找、分析和处理。 1.1 评价维度 运行效率&#xff1a;我们期望排序算法的时间复杂度尽量低&#xf…

sunshine+n2n+moonlight串流远程控制全教程

远程主机说明&#xff08;两台电脑不在同一局域网下&#xff09;&#xff1a; 控制台电脑 被控制电脑 所有工具下载地址&#xff1a;https://www.lanzouw.com/b00eepod7e 密码:1234 一、首先NTN组网 使用NTN技术创建虚拟局域网&#xff0c;实现设备之间的P2P连接。 NTN组网…

SpringBoot中阿里OSS简单使用

官方文档:Java跨域设置实现跨域访问_对象存储(OSS)-阿里云帮助中心 1.pom中引入依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version> </dependency> 如…

区块链 | IPFS:Merkle DAG

&#x1f98a;原文&#xff1a;IPFS: Merkle DAG 数据结构 - 知乎 &#x1f98a;写在前面&#xff1a;本文属于搬运博客&#xff0c;自己留存学习。 1 Merkle DAG 的简介 Merkle DAG 是 IPFS 系统的核心概念之一。虽然 Merkle DAG 并不是由 IPFS 团队发明的&#xff0c;它来自…

模块六:模拟——1419.数青蛙

文章目录 题目描述算法原理解法&#xff08;模拟 分情况讨论&#xff09; 代码实现 题目描述 题目链接&#xff1a;1419.数青蛙 算法原理 解法&#xff08;模拟 分情况讨论&#xff09; 模拟⻘蛙的叫声。 当遇到 ‘r’ ‘o’ ‘a’ ‘k’ 这四个字符的时候&#xff0c;我…
最新文章