VUE.js笔记

news2024/9/27 12:10:29

1.介绍vue

Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。

Vue 应用程序的基本结构通常围绕组件(Components)来组织。组件是 Vue 应用的构建块,它们可以包含 HTML、JavaScript 和 CSS,并且可以独立于其他组件工作。

2.框架结构

1. 根实例和根组件

  • 每个 Vue 应用都是从一个根实例开始的。
  • 根实例通常与一个根组件(App.vue)相关联,这个组件作为应用的入口点和顶层容器。

2. 组件结构

  • 单文件组件:在 Vue 项目中,每个组件通常是一个 .vue 文件,它包含三个部分:<template><script> 和 <style>
  • 组件嵌套:组件可以包含其他子组件,形成嵌套结构。这允许开发者构建复杂的用户界面。

3. 组件通信

  • 父子通信:父组件可以通过 props 向子组件传递数据,子组件可以通过事件向父组件发送消息。
  • 子父通信:子组件可以使用 this.$emit 触发事件,父组件监听这些事件并作出响应。
  • 事件总线:对于更复杂的应用,可以使用事件总线(Event Bus)或 Vuex 进行跨组件通信。

4. 路由(Vue Router)

  • 视图管理:Vue Router 允许你构建单页面应用程序,通过不同的路径来切换不同的视图(组件)。
  • 路由配置:在 router/index.js 中配置路由,定义路径与组件之间的映射关系。

5. 状态管理(Vuex)

  • 集中式存储:Vuex 提供了一个集中式存储管理应用的所有组件的状态。
  • 状态修改:通过提交 mutation 来修改状态,通过 action 处理异步操作。

6. 资源和插件

  • 插件:Vue 插件可以提供额外的功能,如 vue-router 和 vuex
  • 资源:静态资源(如图片、样式表)通常放在 public 目录中。

7. 构建和开发工具

  • Vue CLI:Vue CLI 提供了项目脚手架、构建和开发服务器。
  • 构建配置:通过 vue.config.js 文件自定义构建配置。

8. 项目目录结构

一个典型的 Vue 项目目录结构可能如下所示:

my-project/
│
├── public/             # 静态资源文件
│
├── src/                 # 源代码
│   ├── assets/          # 静态资源,如图片、样式
│   ├── components/      # 应用组件
│   ├── views/           # 视图组件
│   ├── router/          # 路由配置
│   ├── store/           # Vuex 状态管理
│   ├── App.vue          # 根组件
│   └── main.js          # 入口文件
│
├── tests/               # 测试文件
│
├── .gitignore            # Git 忽略文件配置
├── package.json         # 项目依赖和脚本
├── README.md            # 项目说明文件
└── vue.config.js        # Vue CLI 构建配置

理解这些基本结构和组件组织方式有助于开发者更好地组织和管理 Vue 应用程序的代码,使其更加模块化、可维护和可扩展。

3.vue模板语法

【电脑关机重启后,vue项目需要再次使用运行命令,使之运行。】

组件化开发:

组件:由三种语法组成,html,css ,js

语法模板就是{{  }}  双层大括号。

 {{变量名,简单计算,简单的判断(只能是一行内完成) }}

4.生命周期钩子

在 Vue.js 中,生命周期钩子(Lifecycle Hooks)是特殊的函数,可以在 Vue 实例或组件的不同阶段被调用。这些钩子允许开发者在实例或组件的生命周期中的特定时刻执行代码。

1.beforeCreate(创建前)

在实例初始化之后,数据观测和事件/侦听器配置之前被调用。

2.created(创建后)

在实例创建完成后被调用,此时数据观测和事件/侦听器已经设置好,但组件尚未挂载到 DOM 上。

3.beforeMount(组件特有-渲染前):

在首次渲染之前调用,此时虚拟 DOM 已经创建,但尚未挂载到真实 DOM 上。

4.mounted(渲染后)

在实例或组件挂载到 DOM 上后调用,此时可以访问到 DOM 元素。

5.beforeUpdate(更新前)

在数据变化导致虚拟 DOM 重新渲染之前调用。

6.updated(更新后)

在虚拟 DOM 重新渲染并打补丁完成后调用,此时组件已经更新。

7.beforeDestroy(销毁前)

在实例或组件销毁之前调用,此时实例或组件仍然完全可用。

8.destroyed(销毁后)

在实例或组件销毁后调用,此时实例或组件已经不可用。

9.activated(组件特有,用于 keep-alive 缓存的组件):

被 keep-alive 缓存的组件被激活时调用。

10.deactivated(组件特有,用于 keep-alive 缓存的组件):

被 keep-alive 缓存的组件被停用时调用。

11.errorCaptured(Vue 2.5.0+):

捕获组件内的错误时调用。

12.钩子使用

使用生命周期钩子,开发者可以在 Vue 实例或组件的不同阶段执行初始化、数据获取、清理工作等操作。这些钩子是 Vue 应用开发中不可或缺的一部分,它们提供了对组件生命周期的细粒度控制。

new Vue({
  data: {
    message: 'Hello World!'
  },
  beforeCreate: function() {
    console.log('beforeCreate - 实例创建,数据观测和事件/侦听器尚未设置。');
  },
  created: function() {
    console.log('created - 实例已创建,数据观测和事件/侦听器已设置。');
  },
  beforeMount: function() {
    console.log('beforeMount - 首次渲染之前。');
  },
  mounted: function() {
    console.log('mounted - 实例已挂载到 DOM 上。');
  },
  beforeUpdate: function() {
    console.log('beforeUpdate - 数据变化,虚拟 DOM 重新渲染之前。');
  },
  updated: function() {
    console.log('updated - 虚拟 DOM 重新渲染并打补丁完成。');
  },
  beforeDestroy: function() {
    console.log('beforeDestroy - 实例销毁之前。');
  },
  destroyed: function() {
    console.log('destroyed - 实例销毁后。');
  }
});

5.工具和库

Vue Router、Vuex 和 Vue CLI 是 Vue 生态系统中的三个重要组成部分,它们共同支持构建现代的单页面应用程序(SPA)。

Vue Router、Vuex 和 Vue CLI 一起构成了 Vue.js 的官方“三个火枪手”,它们为构建大型、复杂的单页面应用程序提供了必要的工具和模式。通过这些工具,开发者可以更高效地构建和管理现代的前端应用。

1.Vue Router

Vue Router 是 Vue.js 的官方路由管理器。它允许你构建多视图的单页面应用程序,通过不同的路径来切换组件,而不需要重新加载页面。Vue Router 与 Vue.js 核心深度集成,使得在 Vue 应用中使用路由变得简单而直观。

主要特点:

  • 嵌套路由:支持嵌套的路由和视图。
  • 路由参数:可以捕获 URL 中的参数并作为组件的 props 传递。
  • 路由守卫:提供了不同的守卫钩子,如全局守卫、路由独享的守卫和组件内的守卫。
  • 懒加载:支持路由级别的代码分割,可以提高应用的加载速度。

2.Vuex

Vuex 是 Vue.js 的官方状态管理模式。它用于在应用程序中集中管理状态(也称为状态管理模式),适用于复杂应用。Vuex 通过集中存储管理所有组件的状态,并通过相应的规则保证状态以一种可预测的方式发生变化。

主要特点:

  • 单一状态树:整个应用的状态被集中管理在一个对象中。
  • 状态管理:提供了响应式的状态管理。
  • 变更跟踪:可以跟踪状态的变化,方便调试和时间旅行。
  • 热重载:支持热重载和开发工具集成。

3.Vue CLI

Vue CLI 是 Vue.js 的官方命令行工具,用于快速搭建 Vue 项目。它提供了一个易于使用且可扩展的界面,允许开发者快速开始开发 Vue 应用,并包含现代前端开发所需的所有工具。

主要特点:

  • 项目脚手架:快速创建新项目的模板。
  • 插件系统:支持扩展和自定义项目配置。
  • 构建和服务:提供了构建和本地服务的功能。
  • 现代工具链:集成了 Babel、Webpack、PostCSS 等现代前端工具。

使用 Vue CLI 创建项目通常涉及以下步骤:

bash

# 全局安装 Vue CLI
npm install -g @vue/cli

# 创建一个新的 Vue 项目
vue create my-project

# 进入项目目录
cd my-project

# 启动开发服务器
npm run serve

6.响应式数据绑定

Vue.js 实现响应式数据绑定和双向数据流主要依赖于以下几个核心技术:

通过这种方式,Vue.js 使得数据和视图之间的同步变得简单和高效,同时保持了代码的简洁性。开发者不需要手动操作 DOM 或监听事件来更新视图,Vue 的响应式系统会自动处理这些任务。

  1. 响应式系统

    Vue 使用响应式系统来跟踪数据的变化。在 Vue 中,数据通常是通过 data 函数返回的对象来定义的。
  2. 依赖收集

    当组件的模板被渲染时,Vue 会触发数据的 getter,从而将依赖(通常是模板中的变量)收集起来。
  3. 观察者模式

    Vue 的响应式系统基于观察者模式,当数据变化时,依赖于这些数据的观察者(如组件的渲染函数)会被通知并更新。
  4. 虚拟 DOM

    Vue 通过维护一个虚拟 DOM 树来表示真实 DOM 的状态。当数据变化时,Vue 会计算出最小的 DOM 更新。
  5. 双向数据绑定

    Vue 提供了 v-model 指令来实现双向数据绑定。v-model 通常用于表单输入元素,如 <input><textarea> 和 <select>

1.响应式数据绑定:

1.初始化

当创建 Vue 实例时,Vue 会遍历 data 对象中的属性,并使用 Object.defineProperty 将它们转换为 getter/setter。

2.依赖收集

当组件的模板被渲染时,Vue 会访问这些属性(getter),并记录下哪些组件依赖于这些属性。

3.数据变化

当数据发生变化时,触发 setter,Vue 会通知所有依赖于这些数据的组件。

4.异步更新队列

Vue 将所有数据变化放入一个异步队列,然后批量处理这些变化。

5.视图更新

在下一个事件循环中,Vue 清空异步队列,并更新所有依赖的组件的视图。

2.双向数据绑定:

1.v-model 指令

在模板中使用 v-model 指令可以将表单输入元素与数据属性绑定。

2.输入事件监听

Vue 在输入元素上监听 input 事件(对于 <textarea> 可能是 change 事件),并在事件处理函数中更新数据。

3.数据同步

当用户输入时,Vue 通过事件处理函数同步更新数据,从而实现双向绑定。

4.视图响应

由于数据是响应式的,数据的变化会自动触发视图的更新,使得输入元素的值与数据保持一致。

7.组件系统

Vue 的组件系统是构建大型应用程序的关键。通过组件化开发,可以将界面分解为独立的、可复用的组件,每个组件负责应用程序的一部分功能。

通过这些概念和工具,Vue 的组件系统提供了强大的能力来构建和管理复杂的用户界面。开发者可以创建可复用的组件,构建模块化的代码,从而提高开发效率和应用程序的可维护性。

1.组件创建

  • 单文件组件:在 Vue 中,通常使用 .vue 单文件组件,它将模板、脚本和样式整合在一个文件中。
  • 组件结构:一个基本的 Vue 组件至少包含一个 <template>、一个 <script> 部分,可选的 <style> 部分。

2.组件注册

  • 局部注册:在 Vue 组件的 <script> 部分使用 components 属性定义并注册组件。
  • 全局注册:使用 Vue 的 Vue.component 方法在全局范围内注册组件。

3.Props

  • 传递数据:Props 是父组件传递给子组件的数据。子组件通过声明 props 属性来接收从父组件传递的数据。
  • 单向数据流:Props 形成了父子组件之间的单向数据流,即数据只能从父组件流向子组件。

4.事件传递

  • 自定义事件:子组件可以通过 this.$emit 方法触发事件,并将数据传递给父组件。
  • 监听事件:父组件使用 v-on 或 @ 语法监听子组件触发的事件,并定义相应的处理函数。

5.组件通信

  • 父子通信:通过 props 和事件,实现父子组件之间的数据和事件传递。
  • 兄弟通信:通常通过共同的父组件来协调兄弟组件之间的通信。
  • 跨级通信:可以使用事件总线、Vuex 或提供/注入模式来实现。

6.插槽(Slots)

  • 内容分发:插槽允许子组件将内容传递回父组件的模板中,实现更灵活的内容插入。
  • 具名插槽:可以定义具名插槽来插入特定的内容。

7.动态组件

  • <component> 标签:使用 is 属性动态切换不同的组件。

8.混入(Mixins)

  • 代码复用:混入允许你定义可复用的组件逻辑,然后在多个组件中使用这些逻辑。

9.组件库

  • 第三方组件库:如 Vuetify、Element UI 等,提供了一套预制的组件,可以加速开发过程。

8.计算属性与侦听器

在 Vue.js 中,计算属性(Computed Properties)和侦听器(Watchers)是处理复杂数据逻辑的两个重要工具。它们都基于 Vue 的响应式系统,但用途和工作方式有所不同。

计算属性:适用于需要根据现有数据计算新值的场景,且计算结果会被缓存。

侦听器:适用于需要对数据变化做出响应并执行复杂逻辑的场景。

合理使用计算属性和侦听器可以帮助你构建更高效、更易于维护的 Vue 应用程序。

1.计算属性(Computed Properties)

计算属性是基于它们的响应式依赖进行缓存的。只有当计算属性依赖的数据发生变化时,计算属性才会重新计算。它们通常用于以下情况:

  1. 派生状态:当数据需要根据现有数据进行转换或计算时。
  2. 性能优化:避免在模板中进行复杂的逻辑处理,从而提高渲染效率。
new Vue({
  el: '#app',
  data: {
    firstName: 'Jane',
    lastName: 'Doe'
  },
  computed: {
    // 计算属性 fullName 依赖于 firstName 和 lastName
    fullName: function () {
      return this.firstName + ' ' + this.lastName;
    }
  }
});

在上面的例子中,fullName 是一个计算属性,它依赖于 firstNamelastName。当 firstNamelastName 发生变化时,fullName 会自动更新。

2.侦听器(Watchers)

侦听器用于在数据变化时执行异步或开销较大的操作。它们可以用来监听数据的变化,并在变化发生时执行任何响应。

new Vue({
  el: '#app',
  data: {
    question: '',
    answer: 'I cannot answer until you ask a question!'
  },
  watch: {
    // 侦听器监听 question 的变化
    question: function (newQuestion, oldQuestion) {
      this.answer = 'Waiting for you to stop typing...';
      this.debouncedGetAnswer();
    }
  },
  methods: {
    debouncedGetAnswer: function () {
      setTimeout(() => {
        this.answer = 'Thinking...';
        setTimeout(() => {
          this.answer = 'The answer is: 42';
        }, 1000);
      }, 500);
    }
  }
});

在这个例子中,question 是一个被侦听的数据属性。当用户输入问题时,侦听器会触发,执行 debouncedGetAnswer 方法,该方法使用 setTimeout 来模拟异步操作。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

镭射限高防外破预警装置-线路防外破可视化监控,安全尽在掌握中

镭射限高防外破预警装置-线路防外破可视化监控&#xff0c;安全尽在掌握中 在城市化浪潮的汹涌推进中&#xff0c;电力如同现代社会的生命之脉&#xff0c;其安全稳定运行直接关系到每一个人的生活质量和社会的整体发展。然而&#xff0c;随着建设的加速&#xff0c;电力设施通…

宠物店揭秘!那种猫罐头好?4款营养满分主食罐头来袭

五年来&#xff0c;我家宠物店始终秉持初心&#xff0c;为猫咪打造了一个美食乐园&#xff0c;从湿猫粮、干猫粮&#xff0c;到各式零食&#xff0c;应有尽有。最近&#xff0c;猫罐头这股热潮更是席卷而来&#xff0c;成为许多猫咪的新宠。然而&#xff0c;面对市场上各式各样…

C语言课程设计题目四:实验设备管理系统设计

序号系统设计题目进度1职工信息管理系统设计已完成&#xff0c;在本专栏2图书信息管理系统设计已完成&#xff0c;在本专栏3图书管理系统设计已完成&#xff0c;在本专栏4实验设备管理系统设计已完成&#xff0c;在本专栏5西文下拉菜单的设计链接6学生信息管理系统设计链接7学生…

Spring Boot入门全攻略:从环境搭建到项目运行,一步步带你走进高效Java开发的奇妙世界!

Spring Boot 是一个简化 Spring 应用开发的框架&#xff0c;它提供了一种快速、广泛接受的平台&#xff0c;用于创建独立的、生产级的基于 Spring 的应用。以下是一个简单的 Spring Boot 入门教程。 1. 环境准备 Java&#xff1a;确保安装了 Java 8 或更高版本。Maven/Gradle&…

【微信小程序】uniapp中HBuilder修改代码,微信开发者工具没有刷新

方法一&#xff1a;设置-编辑器-按图设置&#xff0c;去掉【修改文件时自动保存】 方法二&#xff1a;开启热加载 方法三&#xff1a;直接HBuilder中用在运行

c语言200例 64

大家好&#xff0c;欢迎来到无限大的频道。 今天带领大家来学习c语言。 题目要求&#xff1a; 设计一个进行候选人的选票程序。假设有三位候选人&#xff0c;在屏幕上输入要选择的候选人姓名&#xff0c; 有10次投票机会&#xff0c;最后输出每个人的得票结果。好的&#xff…

在线聊天室项目(Vue3 + SpringBoot)

目录 项目描述 技术栈选型 项目开发过程文档 项目页面效果 项目源码地址 项目描述 1. 网页在线聊天室&#xff0c;实现了群组系统和好友系统&#xff0c;因此项目可以在公共群组&#xff0c;私有群组和私人之间进行聊天。 2. 项目主要使用Websocket实时通信技术实现聊天&…

Arch Linux 安装步骤

仅做学习记录&#xff0c;有错漏之处欢迎批评指正&#xff01; 上一节&#xff1a;用U盘制作安装镜像 文章目录 二、安装系统2.1 使用U盘启动安装系统2.2 连接网络Wi-Fi方式&#xff08;1&#xff09;开启iwd内置的DHCP客户端&#xff08;2&#xff09;启动iwd并连接Wi-Fi 2.3 …

C++冷门知识点1

1.特殊情况汇总&#xff1a; 负数&#xff0c;空指针&#xff0c;叶节点&#xff0c;INT_MAX和INT_MIN 2.双指针法(快慢指针&#xff0c;头尾指针)&#xff0c;三数指针法(链表逆序那块) 3.一定要注意极端情况 2.e后边可以跟负数&#xff0c;但是不能跟小数 3.string的push_bac…

Navicat数据库管理工具实现Excel、CSV文件导入到MySQL数据库

1.所需要的工具和环境 navicat等第三方数据库管理工具云服务器中安装了 1Panel面板搭建的mysql数据库 2.基于 1Panel启动mysql容器 2.1 环境要求 安装前请确保您的系统符合安装条件&#xff1a; 操作系统&#xff1a;支持主流 Linux 发行版本&#xff08;基于 Debian / Re…

【Wireshark笔记】通过Wireshark检测和分析TCP重传

通过Wireshark检测和分析TCP重传 在网络通信中&#xff0c;TCP重传&#xff08;TCP Retransmission&#xff09;是一种非常重要的现象&#xff0c;特别是在分析网络性能和故障排查时。重传数据包会影响网络性能&#xff0c;导致延迟增加&#xff0c;甚至引发网络拥塞等问题。为…

Java刷题:最小k个数

目录 题目描述&#xff1a; 思路&#xff1a; 具体实现 整体建立一个大小为N的小根堆 通过大根堆实现 完整代码 力扣链接&#xff1a;面试题 17.14. 最小K个数 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 设计一个算法&#xff0c;找出数组中最小的…

【Java 问题】基础——异常

接上文 异常 39.Java 中异常层级结构?40.异常的处理机制&#xff1f;41.三道经典异常处理代码题 39.Java 中异常层级结构? Java的异常是分为多层的。 Throwable 是 Java 语言中所有错误或异常的基类。 Throwable 又分为 Error 和 Exception &#xff0c;其中Error是系统内部…

从‘盲管’到‘智网’,漫途精准构建排水管网监测方案

在城市错综复杂的基础设施网络中&#xff0c;排水管网作为城市的“血脉”&#xff0c;其高效、稳定运行直接关系到城市生活的安宁与财产的安全。面对日益频繁的雨季挑战与气候变化的不确定性&#xff0c;传统“盲管”管理模式已难以满足现代城市治理的需求。 漫途排水管网监测…

本地Docker部署高颜值跨平台照片管理软件lmmich并远程上传图片

文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 本篇文章介绍如何在本地搭建lmmich图片管理软件&#xff0c;并结合cpolar内网穿透实现公网远程访问到局域网内的lmmich&#…

Python新手学习过程记录之基础环境:环境变量、版本区分、虚拟环境

https://img-blog.csdnimg.cn/img_convert/0604267530a515112e51dfc80d0b0ee7.png 刚开始接触Python并学习一门开发语言,可能就会遇到一些棘手的问题,比如电脑上不知不觉已经安装了多个python版本,python3.8/3.10/3.11,甚至一些软件中也集成有python解释器&#xff1b;那么我编…

c语言:知识补充

c语言中编译开始会对#define&#xff0c;#include等内容做预处理&#xff0c;可以用#define写一些简单函数&#xff0c;方便使用 #include <stdio.h> #include <stdlib.h>#define MAX(A, B) ((A) > (B) ? (A) : (B))int main(){printf("%d\n", MAX(…

【Java 集合】List接口 —— ArrayList 与 LinkedList 详解

List接口继承自Collection接口&#xff0c;是单列集合的一个重要分支。 在List集合中允许出现重复的元素&#xff0c;所有的元素是以一种线性方式进行存储的&#xff0c;在程序中可以通过索引&#xff08;类似于数组中的元素角标&#xff09;来访问集合中的指定元素。另外&…

onload_tcpdump命令抓包报错Onload stack [7,] already has tcpdump process

最近碰到Onload 不支持同时运行多个 tcpdump 进程的报错&#xff0c;实际上使用了ps查询当时系统中并没有tcpdump相关进程存在。需要重启服务器本机使用onload加速的相关进程后才能使用onload_tcpdump正常抓包&#xff0c;很奇怪&#xff0c;之前确实没遇到这样的问题&#xff…

生成速度提升70%,32K版本上新,讯飞星火API全新升级!

从“通用”到“真正有用”&#xff0c;大模型应用价值正在释放&#xff01;在C端&#xff0c;AI会议、AI绘图、AI音乐、AI PPT、AI视频等新兴应用层出不穷。在B端&#xff0c;大模型在智能客服、智能营销、知识问答等场景中的应用效果开始显现。 对于绝大多数AI开发者和中小型…