深入了解Vue.js:构建现代、响应式的前端应用

Alt

文章目录

    • 1. Vue.js简介
      • 1.1 安装Vue.js
    • 2. Vue的核心概念
      • 2.1 数据驱动
      • 2.2 组件化
      • 2.3 生命周期钩子
    • 3. Vue的特性
      • 3.1 响应式数据
      • 3.2 模板语法
      • 3.3 组件通信
    • 4. 示例项目
    • 结语

🎈个人主页:程序员 小侯
🎐CSDN新晋作者
🎉欢迎 👍点赞✍评论⭐收藏
✨收录专栏:Java框架
✨文章内容:Vue.js
🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗

Vue.js(通常称为Vue)是一款流行的JavaScript框架,专注于构建现代、响应式的前端应用。它的简单性和灵活性使得开发者能够快速构建交互性强、用户体验优秀的应用。本文将深入探讨Vue.js的核心概念、特性以及通过实例演示如何使用Vue构建前端应用。

1. Vue.js简介

Vue.js是一款渐进式JavaScript框架。渐进式意味着你可以逐步采用Vue,从一个小范围的使用开始,逐渐扩展到整个应用。Vue的设计灵感来自Angular和React,但它更轻量、更易学。
在这里插入图片描述

1.1 安装Vue.js

使用Vue.js前,首先需要安装Vue。你可以通过以下方式安装Vue:

# 使用npm
npm install vue

# 使用yarn
yarn add vue

2. Vue的核心概念

2.1 数据驱动

Vue采用了数据驱动的思想。简单来说,这意味着你的应用的状态是响应式的。当状态发生变化时,页面会自动更新。

<div id="app">
  <p>{{ message }}</p>
</div>

<script>
  var app = new Vue({
    el: '#app',
    data: {
      message: 'Hello, Vue!'
    }
  });
</script>

在这个例子中,message是Vue实例的一个数据属性,它绑定到了页面上的<p>元素中。当message的值改变时,页面上的内容会自动更新。

2.2 组件化

Vue提倡组件化开发,将整个应用划分为多个独立、可复用的组件。每个组件都包含自己的HTML、CSS和JavaScript,可以嵌套使用,形成一个层次清晰的组件树。

<!-- 定义一个简单的组件 -->
<template>
  <div>
    <h1>{{ title }}</h1>
    <p>{{ content }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      title: 'Vue Component',
      content: 'This is a simple Vue component.'
    };
  }
};
</script>

<style scoped>
/* 组件样式 */
h1 {
  color: #42b983;
}
</style>

在这里插入图片描述

2.3 生命周期钩子

Vue组件具有一系列的生命周期钩子,可以在不同阶段执行相应的逻辑。常用的生命周期钩子包括createdmountedupdateddestroyed等。

<script>
export default {
  data() {
    return {
      message: 'Hello, Vue!'
    };
  },
  created() {
    console.log('Component created');
  },
  mounted() {
    console.log('Component mounted');
  },
  updated() {
    console.log('Component updated');
  },
  destroyed() {
    console.log('Component destroyed');
  }
};
</script>

3. Vue的特性

3.1 响应式数据

Vue通过数据劫持和观察的方式实现响应式数据。当数据发生变化时,相关的视图会自动更新。

var data = { message: 'Hello, Vue!' };
var vm = new Vue({
  data: data
});

// 修改数据
vm.message = 'Updated message';

3.2 模板语法

Vue使用基于HTML的模板语法,允许将模板中的表达式绑定到数据。

<div id="app">
  <p>{{ message }}</p>
</div>

<script>
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello, Vue!'
  }
});
</script>

3.3 组件通信

Vue组件之间可以通过Props和Events进行通信。Props用于父组件向子组件传递数据,Events用于子组件向父组件传递消息。

<!-- ParentComponent.vue -->
<template>
  <child-component :message="parentMessage" @notify="handleNotify" />
</template

>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      parentMessage: 'Message from parent'
    };
  },
  methods: {
    handleNotify(message) {
      console.log('Received message from child:', message);
    }
  }
};
</script>

<!-- ChildComponent.vue -->
<template>
  <div>
    <p>{{ message }}</p>
    <button @click="notifyParent">Notify Parent</button>
  </div>
</template>

<script>
export default {
  props: ['message'],
  methods: {
    notifyParent() {
      this.$emit('notify', 'Message from child');
    }
  }
};
</script>

在这里插入图片描述

4. 示例项目

为了更好地理解Vue.js的应用,我们来构建一个简单的任务列表应用。

任务列表应用

我们的任务列表应用将具有以下功能:

  1. 显示任务列表。
  2. 添加新任务。
  3. 标记任务为已完成。
  4. 删除任务。

首先,我们创建一个TaskList组件用于显示任务列表。

<!-- TaskList.vue -->
<template>
  <div>
    <h2>Task List</h2>
    <ul>
      <li v-for="task in tasks" :key="task.id">
        <input type="checkbox" v-model="task.completed" />
        <span :class="{ completed: task.completed }">{{ task.title }}</span>
        <button @click="removeTask(task.id)">Remove</button>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  props: ['tasks'],
  methods: {
    removeTask(id) {
      this.$emit('remove', id);
    }
  }
};
</script>

<style scoped>
.completed {
  text-decoration: line-through;
}
</style>

接下来,我们创建一个AddTask组件用于添加新任务。

<!-- AddTask.vue -->
<template>
  <div>
    <h2>Add Task</h2>
    <input v-model="newTask" />
    <button @click="addTask">Add</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      newTask: ''
    };
  },
  methods: {
    addTask() {
      if (this.newTask) {
        this.$emit('add', { title: this.newTask, completed: false });
        this.newTask = '';
      }
    }
  }
};
</script>

最后,我们创建一个App组件来组合这两个子组件。

<!-- App.vue -->
<template>
  <div>
    <TaskList :tasks="tasks" @remove="removeTask" />
    <AddTask @add="addTask" />
  </div>
</template>

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

export default {
  components: {
    TaskList,
    AddTask
  },
  data() {
    return {
      tasks: [
        { id: 1, title: 'Task 1', completed: false },
        { id: 2, title: 'Task 2', completed: true },
        { id: 3, title: 'Task 3', completed: false }
      ]
    };
  },
  methods: {
    addTask(task) {
      this.tasks.push({ id: Date.now(), ...task });
    },
    removeTask(id) {
      this.tasks = this.tasks.filter(task => task.id !== id);
    }
  }
};
</script>

这个简单的任务列表应用展示了Vue.js的许多特性,包括组件化、数据驱动、事件处理等。

结语

Vue.js作为一款现代的前端框架,具有极佳的灵活性和易用性。通过深入了解Vue的核心概念和特性,我们可以更好地利用它来构建出色的前端应用。希望本文能为你提供一个全面的Vue.js入门指南,使你能够在实际项目中更加游刃有余地使用Vue.js。 Happy coding!

后记 👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹

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

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

相关文章

2023 如何下载最干净的 win10 win11 微软官方原版系统镜像(详细图文)

前言 不会吧不会吧&#xff0c;不会到现在还有人不会下载原版系统镜像吧 开始 win10官方下载工具下载地址&#xff1a;https://www.microsoft.com/zh-cn/software-download/windows10 win11官方下载工具下载地址&#xff1a;https://www.microsoft.com/zh-cn/software-downl…

java实验:数据库应用(idea+mysql+php)

设计用户注册和登录界面&#xff0c;实现用户注册和登录操作。 设计用户注册/登录界面;使用工具在MySQL中创建user表&#xff0c;包括学号、姓名、密码、专业、班级&#xff1b;实现注册操作&#xff1a;在user表中插入一条新纪录&#xff0c;但学号不能重复&#xff1b;实现登…

Mybatis 操作续集2(结合上文)

Mybatis 是一个持久层框架,用于简化数据库的操作,和Spring 没有任何关系,我们现在能使用它是因为 Spring Boot 把Mybatis 的依赖给引入进来了,在 pom.xml 里面 Mybatis 如何进行重命名? 看最后两行代码,这样就能重命名了 package com.example.mybatisdemo.mapper;import com…

最大单词数算法分析

题目描述&#xff1a; 算法一&#xff1a; 代码实现&#xff1a; # include<stdio.h> # include<string.h>int main(){//char text[100]"leet code";//char brokenLetters[26]"lt";char text[100]"hello world";char brokenLetters…

代码随想录第二十二天(一刷C语言)|组合总数电话号码的字母组合

创作目的&#xff1a;为了方便自己后续复习重点&#xff0c;以及养成写博客的习惯。 一、组合总数 思路&#xff1a;参考carl文档和视频 1、需要一维数组path来存放符合条件的结果&#xff0c;二维数组result来存放结果集。 2、targetSum 目标和&#xff0c;也就是题目中的…

AD7124-4 实测热电偶数据读取,电压精度到稳定到±1uV, 电压波动260nV, 温度精度到±0.01℃

AD7124-4 实测热电偶数据读取&#xff0c;电压精度到稳定到1uV, 电压波动260nV, 温度精度到0.01℃ AD7124_STM32_ADI官网例程使用stm32 和ad7124做温控调试&#xff0c;发现效果还是不错的&#xff0c;至少比ads1256的效果好多啦&#xff01;Chapter1 AD7124-4 实测热电偶数据读…

OpenSSH 漏洞修复升级最新版本

Centos7系统ssh默认版本一般是OpenSSH7.4左右&#xff0c;低版本是有漏洞的而且是高危漏洞&#xff0c;在软件交付和安全扫描上是过不了关的&#xff0c;一般情况需要升级OpenSSH的最新版本 今天详细说下升级最新版本的处理过程&#xff08;认真看会发现操作很简单&#xff0c…

springboot 整合 Spring Security 上篇

1.创建springBoot 项目工程(spring6.0的底层、JDK17) 1.添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>配置完成启动访问controller会出现登录…

P5 链表 尾部插入新节点(不是指定点)

目录 前言 01 链表数据插入之直接在链表尾插入&#xff08;不是指定点&#xff09; 02 尾插创建链表优化 示例代码 前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C》✨✨✨ &#x1f525; 推荐专栏2: 《 Linux C应用编程&#xff08;概念…

JS逆向-mytoken之code参数

前言 本文是该专栏的第60篇,后面会持续分享python爬虫干货知识,记得关注。 本文以mytoken为例,通过js逆向获取其code参数的生成规律。具体的“逆向”思路逻辑,笔者将会详细介绍每个步骤,并且将在正文结合“完整代码”进行详细说明。 接下来,跟着笔者直接往下看正文详细…

Halcon参考手册目标检测和实例分割知识总结

1.1 目标检测原理介 目标检测&#xff1a;我们希望找到图像中的不同实例并将它们分配给某一个类别。实例可以部分重叠&#xff0c;但仍然可以区分为不同的实例。如图(1)所示&#xff0c;在输入图像中找到三个实例并将其分配给某一个类别。 图(1)目标检测示例 实例分割是目标检…

轻量封装WebGPU渲染系统示例<40>- 多层材质的Mask混合(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/MaskTextureEffect.ts 当前示例运行效果: 两层材质效果: 三层材质效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下&#xff1a; export c…

笔记-基于CH579M模块通过网线直连电脑进行数据收发(无需网络)

刚学习&#xff0c;做个记录。 基于CH579M模块通过网线直连电脑进行数据收发(无需网络) 目录 一、工具1、CH579模块2、 网线3、电脑以及网络调试工具 二、操作步骤1、TCP/UDP等程序下载以及设置以太网IP2、网络断开3、检查以太网是否正常显示并稳定4、打开网络调试助手进行测试…

643. 子数组最大平均数 I

子数组最大平均数 I 描述 : 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。 请你找出平均数最大且 长度为 k 的连续子数组&#xff0c;并输出该最大平均数。 任何误差小于 10-5 的答案都将被视为正确答案。 题目 : LeetCode 643.子数组最大平均数 :: 643. 子数…

Mybatis 分页查询的三种实现

Mybatis 分页查询 1. 直接在 sql 中使用 limit2. 使用 RowBounds3. 使用 Mybatis 提供的拦截器机制3.1 创建一个自定义拦截器类实现 Interceptor3.2 创建分页查询函数 与 sql3.3 编写拦截逻辑3.4 注册 PageInterceptor 到 Mybatis 拦截器链中3.5 测试 准备一个分页查询类 Data…

优彩云采集器最新版免费下载,优彩云采集器免费

随着网络时代的发展&#xff0c;SEO&#xff08;Search Engine Optimization&#xff0c;搜索引擎优化&#xff09;已经成为网站推广和营销的关键一环。在SEO的世界里&#xff0c;原创内容的重要性愈发凸显。想要做到每天更新大量原创文章&#xff0c;并不是一件轻松的事情。优…

NIO网络编程

Netty学习之NIO基础 - Nyimas Blog 1、阻塞 阻塞模式下&#xff0c;相关方法都会导致线程暂停 ServerSocketChannel.accept 会在没有连接建立时让线程暂停SocketChannel.read 会在通道中没有数据可读时让线程暂停阻塞的表现其实就是线程暂停了&#xff0c;暂停期间不会占用 c…

开源软件license介绍与检测

开源License介绍 通俗来讲&#xff0c;开源许可证就是一种允许软件使用者在一定条件内按照需要自由使用和修改软件及其源代码的的法律条款。借此条款&#xff0c;软件作者可以将这些权利许可给使用者&#xff0c;并告知使用限制。这些许可条款可以由个人、商业公司或非赢利组织…

mediapipe+opencv实现保存图像中的人脸,抹去其他信息

mediapipeopencv MediaPipe本身不提供图像处理功能&#xff0c;它主要用于检测和跟踪人脸、手势、姿势等。如果您想要从图像中仅提取人脸主要信息并去除其他信息. # codingutf-8 """project: teatAuthor&#xff1a;念卿 刘file&#xff1a; test.pydate&…

2022年8月2日 Go生态洞察:Go 1.19版本发布深度解析

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…