Vue框架分享与总结

news2024/12/23 1:55:27

总结开发中最常用的vue语法,以及对特定语法的理解。vue官网

文章目录

    • 一、创建vue项目
      • 1、使用开发工具创建
      • 2、使用命令行创建
      • 3、vue框架结构
      • 4、Vue文件结构
    • 二、Vue 常用模板语法
      • 1、v-if、v-show
      • 2、v-for
      • 3、v-on
      • 4、v-bind
      • 5、v-model
    • 三、组件通信
      • 1、父组件给子组件传递
      • 2、子组件给父组件传递
    • 四、生命周期
      • 1、页面生命周期
      • 2、组件生命周期
      • 3、App生命周期
    • 五、vue数据变量类型梳理
      • 1、普通变量
      • 2、data
      • 3、props变量
      • 4、computed计算属性
      • 5、watch监听
    • 六、代码复用
      • 1、匿名插槽
      • 2、具名插槽
    • 七、Vue框架理解

一、创建vue项目

1、使用开发工具创建

很多开发工具新建项目带有vue

image-20230906154445506

2、使用命令行创建

安装vue-cli脚手架

# Vue CLI 2.x版本
npm install -g vue-cli
# Vue CLI 3.x版本
npm install -g @vue/cli

查看版本

vue -V

创建vue项目

# Vue CLI 2.x版本
vue create <project-name>
# Vue CLI 3.x版本
vue init <template-name> <project-name>

查看可用模板

参数是必须传递的,因为它指定了使用哪个模板来创建新的Vue项目。Vue CLI 2.x版本提供了多个官方模板,如webpack、browserify、simple等,也支持第三方模板。你可以通过运行以下命令查看所有可用的模板:

vue list

3、vue框架结构

├── README.md
├── babel.config.js			# js相关配置文件
├── node_modules				# 项目依赖包
├── package-lock.json
├── package.json				# 项目库
├── postcss.config.js		# 配置CSS的预处理器
├── public							# 页面入口文件
│   ├── favicon.ico
│   └── index.html
└── src									# 源代码目录
    ├── App.vue					# vue入口
    ├── assets					# 资源文件夹
    ├── components			# 公共组件
    └── main.js					# 程序入口(如java、C++的main)

4、Vue文件结构

在Vue组件中,<template><script><style>标签的加载顺序是固定的,依次为:

  1. <template>标签:模板,用于定义组件【本质为渲染函数】
  2. <script>标签:用于定义组件的JavaScript代码
  3. <style>标签:CSS样式
<template>
  <div class="hello">
	  <div >{{test}}</div>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
	  return {
		  test:'阿森的',
	  }
  },
}
</script>

<style scoped>
h3 {
  margin: 40px 0 0;
}
</style>

二、Vue 常用模板语法

1、v-if、v-show

<template>
  <div v-if="false" class="hello">
  </div>
</template>

v-if的实现:在 Vue.js 源码中,v-if 指令的实现是通过 render 函数来实现的。当解析到 v-if 指令时,Vue.js 会根据表达式的值来决定是否需要渲染对应的 DOM 元素。

具体来说,Vue.js 会在编译阶段将模板转换为 render 函数,然后在运行时执行该函数来生成虚拟 DOM。当执行到 v-if 指令时,render 函数会根据表达式的值来决定是否需要渲染对应的虚拟 DOM 节点。

如果表达式的值为真,则会渲染对应的虚拟 DOM 节点;否则会跳过该节点不进行渲染。这样就能够实现根据条件动态渲染 DOM 元素的功能。

v-show的实现:display:“none”;

2、v-for

<template>
  <div class="hello">
	  <div v-for="(item, index) in [{},{}]" v-bind:key="index">asfdaf</div>
  </div>
</template>

3、v-on

v-on就是用于绑定事件的

绑定事件单个事件

<div v-on:click="onClickItem">asfdaf</div>

绑定多个事件

<div v-on="{ mousedown: onMouseDown, mouseup: onMouseUp }">按下或松开我</div>

可以简写为@

<div @click="handleClick">点击我</div>

4、v-bind

v-bind用于绑定数据和元素属性

<img v-bind:src="imageUrl">

一般我们省略不写

<img :src="imageUrl">

5、v-model

v-model 是 Vue.js 中用于双向数据绑定的指令,它可以将表单元素的值与 Vue 实例中的数据进行绑定,实现数据的双向同步。

<input
	v-model="inputColor"
	type="text"
	class="input"
	placeholder="颜色值,例:#0099FF"
	adjust-position="true"
  >

v-model与v-bind区别:

1、v-model用于在表单元素和Vue.js实例的数据之间建立双向绑定关系

2、v-bind用于动态地绑定HTML元素的属性值

如果换成v-bind的话,如下:

仅仅在data刷新是能初始化数据,而输入框编写并不能触发data刷新,这里会造成不同步。

<input :value="inputColor">

三、组件通信

1、父组件给子组件传递

HelloWorld.vue提供对外的onAlert方法

<template>
	<div class="hello">
		<h1>asdf</h1>
	</div>
</template>

<script>
export default {
	name: 'HelloWorld',
	methods:{
		onAlert() {
			alert('123')
		},
	}
};
</script>

父页面使用ref调用

<HelloWorld ref="helloWorldRef" />
this.$refs.helloWorldRef.onAlert();

2、子组件给父组件传递

父页面提供回调方法:@changeSelect=“changeSelect”

<template>
  <div id="app">
    <HelloWorld @changeSelect="changeSelect" msg="Welcome to Your Vue.js App"/>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'app',
  components: {
    HelloWorld
  },
  methods:{
	  changeSelect(e){
		  alert('子组件调用父页面'+e)
	  }
  }
}
</script>

子组件调用

<template>
	<div class="hello">
		<h1 @click="onTapItem">asdf</h1>
	</div>
</template>

<script>
export default {
	name: 'HelloWorld',
	methods:{
		onTapItem() {
			this.$emit('changeSelect', '123');
		},
	}
};
</script>

四、生命周期

1、页面生命周期

vue的完整生命周期

Vue.js 的生命周期钩子是一组在组件实例化、更新和销毁过程中自动调用的函数,用于执行特定的操作。Vue.js 的生命周期钩子可以分为以下三个阶段:

  1. 创建阶段(Creation)

    • beforeCreate:实例刚被创建,数据观测和事件配置之前调用。
    • created:实例已经创建完成,数据观测和事件配置已完成。
    • beforeMount:模板编译/挂载之前调用。
    • mounted:实例已经挂载到 DOM 上。
  2. 更新阶段(Update)

    • beforeUpdate:数据更新时调用,但是界面尚未重新渲染。
    • updated:数据更新完成时调用,界面已经重新渲染。
  3. 销毁阶段(Destruction)

    • beforeDestroy:实例销毁之前调用。
    • destroyed:实例销毁之后调用。

以下是 Vue.js 生命周期钩子的执行顺序:

beforeCreate -> created -> beforeMount -> mounted -> beforeUpdate -> updated -> beforeDestroy -> destroyed

2、组件生命周期

vue的阉割版生命周期

以下是更小粒度组件的生命周期钩子:

  • beforeCreate:实例刚被创建,数据观测和事件配置之前调用。
  • created:实例已经创建完成,数据观测和事件配置已完成。
  • beforeUpdate:数据更新时调用,但是界面尚未重新渲染。
  • updated:数据更新完成时调用,界面已经重新渲染。

注意:组件没有 beforeMountmounted 生命周期钩子,因为它们不需要挂载到 DOM 上。此外,更小粒度的组件也没有销毁阶段的生命周期钩子,因为它们不需要手动销毁。

3、App生命周期

手机端小程序框架生命周期,非vue生命周期。

onLaunchonShowonHide是小程序的生命周期函数,它们分别在小程序启动、显示和隐藏时被调用。

  • onLaunch:当小程序初始化完成时,会触发onLaunch函数。在这个函数中,可以获取小程序的启动参数,如场景值、query等。

  • onShow:当小程序启动、或从后台进入前台显示,会触发onShow函数。在这个函数中,可以获取小程序的启动参数,如场景值、query等。

  • onHide:当小程序从前台进入后台,会触发onHide函数。在这个函数中,可以做一些数据保存等操作。

这些生命周期函数可以在小程序开发中使用,以便我们在不同的场景下执行不同的操作。

五、vue数据变量类型梳理

1、普通变量

存在当前vue实例中,不与UI层绑定。

  • 声明在script中

在script标签中声明的变量是组件内部的局部变量,只能在当前组件内部使用。这些变量可以在组件的各个方法中使用,但不能在模板中使用。下图所示:hello转test才能在模板中使用

<template>
  <div class="hello">
	  <div >{{test}}</div>
  </div>
</template>

<script>
// 声明在script中
const hello="adf"

export default {
  name: 'HelloWorld',
  data () {
	  return {
		  test:hello,
	  }
  },
}
</script>
  • 声明在this中

而this变量指向当前组件的实例对象,它包含了组件的所有属性和方法。在组件的各个方法中,可以通过this变量来访问组件实例对象的属性和方法。同时,在模板中也可以使用this变量来访问组件实例对象的属性和方法。

// 使用this操作即可
this.tempData=1;

2、data

需要操作UI的使用data数据双向绑定

注意:必须先在data属性中声明它,只有在data属性中声明的变量才会被Vue所监听,从而实现数据的响应式更新。

// 初始化
export default {
  name: 'AppRow',
  data() {
    const tempData = 1+1
    return {
      tempData,
    }
  },
}

// 存
this.setData({
	tempData:1
})

// 取
const tempData=this.data.tempData;

3、props变量

父组件给子组件传值

HelloWorld组件

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  }
}
</script>

使用

<HelloWorld msg="Welcome to Your Vue.js App"/>

4、computed计算属性

等价于redux、mobx中的计算属性。

<template>
	<div class="hello">
		<h1>{{ information }}</h1>
	</div>
</template>

<script>
export default {
	name: 'HelloWorld',
	data() {
		return {
			name: '张三',
			age: 18
		};
	},
	computed: {
		information() {
			const { name, age } = this;
			return 'name:' + name + ',age:' + age;
		}
	}
};
</script>

【重要】实现逻辑:在计算属性的实现中,有两个关键的元素:依赖跟踪和缓存。

依赖跟踪:计算属性依赖于一个或多个响应式状态(例如数据属性或其他计算属性)。当这些依赖发生变化时,计算属性需要重新计算其值。为了实现这一点,计算属性会通过监听它的依赖项来自动追踪变化。一旦某个依赖项发生变化,计算属性就会被标记为“不稳定”,需要重新计算。这种依赖跟踪的实现方式通常涉及到依赖收集和派发更新。

缓存:为了提高性能,计算属性通常会缓存其值。这意味着在计算属性的依赖项没有变化时,它可以直接返回之前缓存的值,而不需要重新计算。只有当依赖项发生变化时,计算属性才会重新计算,并更新缓存的值。

综上所述,计算属性的实现逻辑包括以下步骤:

  1. 在计算属性的定义中,明确指定它所依赖的响应式状态(即依赖项)。
  2. 在计算属性被访问时,开始依赖收集,将正在访问计算属性的代码位置添加到依赖项的依赖列表中。
  3. 当依赖项的值发生变化时,派发更新,通知计算属性需要重新计算。
  4. 计算属性根据其定义的计算逻辑重新计算值,并将结果缓存起来。
  5. 返回计算属性的值给调用方。
  6. 如果依赖项再次发生变化,重复上述步骤。

通过依赖跟踪和缓存机制,计算属性能够在依赖项变化时自动更新,并在不必要的情况下避免重复计算,提高了性能和效率。

1、数据改变是先改变props、data这些,其次才是计算属性

2、计算属性会收集依赖的数据,并监听。因此我们为了刷新可能会写看似无意义的空表达式。mobx的autoRun也有类似操作。

computed: {
	information() {
		this.count;//计算属性监听count
		const { name, age } = this;
		return 'name:' + name + ',age:' + age;
	}
},

5、watch监听

一般监听props、data数据变化

export default {
	props: {
		chartData: {
			default: () => {},
			type: Object
		}
	},
	watch: {
		chartData: {
			deep: true,
			handler(val) {
				// todo处理
			}
		}
	}
};

六、代码复用

vue的props可以传数据,插槽可以传标签语法。而React没这个区分,React的props啥都可以传。

1、匿名插槽

相当于React默认的props:child

image-20230907161912397

HelloWorld组件接收slot

<template>
	<div class="hello">
		<h1 @click="onTapItem">asdf</h1>
		<slot/>
	</div>
</template>

页面使用

<template>
  <div id="app">
	<HelloWorld>
		<div>这是匿名插槽</div>
	</HelloWorld>
  </div>
</template>

2、具名插槽

相当于React的props

image-20230907162729519

HelloWorld组件定义了footer、header插槽的位置

<template>
	<div class="hello">
		<h1 @click="onTapItem">asdf</h1>
		<slot name="footer"/>
		<slot name="header"/>
	</div>
</template>

页面使用

<template>
  <div id="app">
	<HelloWorld>
		<template v-slot:header>
			<div>这是具名header插槽</div>
		</template>
		<template v-slot:footer>
			<div>这是具名footer插槽</div>
		</template>
	</HelloWorld>
  </div>
</template>

七、Vue框架理解

https://www.php.cn/faq/499191.html

vue本质是一个类

vue项目中可以包含多个vue实例。在vue项目中,一般只有一个VUE实例在main.js中定义,其他都是vue组件实例。Vue是由一个个实例构建而成的,一个组件就是一个Vue的实例,每个组件内部都可以写属性,因此每一个组件都是一个Vue的实例。

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

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

相关文章

Bytebase 2.8.0 - ​全新升级的数据脱敏功能

&#x1f680; 新功能 全新升级的数据脱敏功能&#xff0c;提供更加细化的脱敏和访问权限配置。全新升级的 SQL 编辑器界面。库表同步功能支持 Oracle。支持设置公告。 &#x1f384; 改进 新增基于 MySQL parser 的数据脱敏内核。调整了侧边栏数据库列表&#xff0c;用最近…

Docker实战-第一章欢迎来到Docker世界

Docker基础 什么是Docker docker是包括一个命令行程序、后台守护进程和一组远程服务&#xff0c;它简化了安装、运行、发布和删除软件的工作。docker实现的基础是UNIX的容器技术。所以在docker出世之前已经有容器的概念&#xff0c;而且像谷歌一类公司也在探索自己的容器&…

关于taos数据库使用过程中突发“unable to establish connection”问题解决

项目使用的版本信息 1.taos的版本信息 3.0.4.1 2.jdbc的版本 3.2.1 3.druid连接池版本 1.2.11问题描述 Java应用服务连接&#xff0c;突然大量抛出如下的异常信息导致应用宕机&#xff1a; sql: select server_status(), desc: unable to establish connection和集团DBA沟通…

云原生微服务 第四章 Spring Cloud Netflix 之 Eureka

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 文章目录 系列文章目录[TOC](文章目录) 前言1、Eureka 两大组件2、Eureka 服务注册与发现3、案例3.1、创建主工程3.1.1、主…

(超详解)堆排序+(图解)

目录&#xff1a; 1:如何建堆(两种方法) 2:两种方法建堆的时间复杂度分析与计算 3:不同类型的排序方式我们应该如何建堆 文章正式开始&#xff1a; 1&#xff1a;如何建堆 在实现堆排序之前我们必须得建堆&#xff0c;才能够实现堆排序 首先在讲解如何建堆之前让我们先来回顾一…

保研复习-计算机组成原理

计算机组成原理 计算机组成冯诺依曼体系结构计算机系统的层次结构计算机的五大组成部件编译和解释的区别 CPUCPU的组成寄存器的类型指令类型指令功能指令执行过程 存储器存储器的层次结构寻址方式 输入和输出io方式有哪几种IO接口的基本结构 计算机组成 冯诺依曼体系结构 存储…

如何将你在树莓派上部署的 IoT 物联网 MQTT 服务发布到公网?

​ 上一章&#xff0c;你成功的在树莓派搭建了 EMQX 开源社区版&#xff0c;用来提供 MQTT 服务&#xff0c;并验证了设备端接入和消息通信。但你发现只能在局域网内访问 emqx.local 服务&#xff0c;而 IoT 设备分布在全国各地公共网络环境&#xff0c;这些设备该如何接入呢&a…

Android 13 CameraMetadata详解1 (内存分布以及增删改查)

文章目录 简介allocate_camera_metadataadd_camera_metadata_entrydelete_camera_metadata_entryupdate_camera_metadata_entryfind_camera_metadata_entry 点赞收藏加关注&#xff0c;下次找我不迷路。 也欢迎关注微信公众号 无限无羡 期待与你的相识&#xff01; 简介 初识…

【面试必刷TOP101】删除链表的倒数第n个节点 两个链表的第一个公共结点

目录 题目&#xff1a;删除链表的倒数第n个节点_牛客题霸_牛客网 (nowcoder.com) 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;两个链表的第一个公共结点_牛客题霸_牛客网 (nowcoder.com) …

雷达仿真:FMCW DDMA-MIMO 3D点云获取方法

1.DDMA-MIMO原理 由于TDMA-MIMO采用不同单天线交替发射信号&#xff0c;没有更好的利用发射天线同时工作的发射资源&#xff0c;导致发射功率低以及损耗大&#xff0c;从而使得TDMA波形只能应用在近距离探测的低功率雷达场景。而DDMA波形则能很好的弥补TDMA上述缺点&#xff0c…

为什么用IP访问网站也要使用SSL证书

IP地址SSL证书是一种专门用于公网IP地址验证的数字证书。它可以为公网IP地址提供安全的数据传输保障&#xff0c;解决了IP地址明文传输的安全隐患&#xff0c;保护了IP地址的数据传输安全。 与普通的SSL证书不同&#xff0c;IP地址SSL证书是基于IP地址进行验证的。在申请IP地址…

ssh登录时间久或登陆后报错

情况1 问题描述&#xff1a; ssh登录时间很久&#xff0c;登录后出现abrt-cli status timed out 的报错 问题原因&#xff1a; .lock文件被锁导致 执行systemctl status abrtd.service可以看到被锁的.lock 处理方式&#xff1a; ps -ef | grep pid 找到被锁的进程kill掉…

Java基于SpringBoot的在线考试系统的研究与实现(附源码,教程)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 第一章第二章.主要技术第三章第四章 系统设计4.1功能结构4.2 数据库设计4.2.1 数据库E/R图4.2.2 数…

Windows安装cuda和cudnn教程最新版(2023年9月)

文章目录 cudacudnn cuda 查看电脑的cuda最高驱动版本&#xff08;适用于N卡电脑-Nvidia&#xff09; winR打开命令行&#xff0c;输入nvidia-smi 右上角cuda -version就是目前支持的最高cuda版本 nvidia官网下载cuda 下载地址&#xff1a;https://developer.nvidia.com/cuda…

pip常用指令

文章目录 简介pip的基本用法常用指令查看pip版本安装Python软件包指定版本安装Python软件包pip安装多个Python软件包通过requirements.txt文件批量安装Python软件包pip安装本地whl安装包 下载安装包到本地将已安装的Python软件包信息导出到指定文件中卸载Python软件包查看当前环…

[S2] Challenge 25 心脏病预测

问题 您是一家医疗保健公司的数据科学家&#xff0c;试图创建患者是否患有心脏病的预测因子。目前&#xff0c;您正在试验 11 种不同的特征&#xff08;潜在心脏病指标&#xff09;和 XGBoost 分类模型&#xff0c;您注意到它的性能可能会根据其调整方式而发生很大变化。在此挑…

Git学习笔记3

Git分支管理&#xff1a; 先来考虑一个问题: 开发者A开发软件的某一个功能模块, 还没有开发完成&#xff0c;但害怕进度丢失就提交。假设另一位开发者B并不知道A没有完成, 而直接使用了A开发的文件,这造成了问题。 解决方法: 开发者A创建一个属于自己的分支&#xff0c;这个分…

vite+react 使用 react-activation 实现缓存页面

对应的版本 "react": "^18.2.0", "react-activation": "^0.12.4", "react-dom": "^18.2.0", "react-router-dom": "^6.15.0",react-activation 这是一个npm包&#xff0c;在react keep alive…

Linux服务器查看CPU相关信息

文章目录 一、基本概念cpu个数cpu核数超线程技术 二、查看命令查看CPU型号查看物理CPU个数&#xff08;物理层面&#xff09;查看每个物理CPU中core个数(核数)查看逻辑CPU个数&#xff08;逻辑层面&#xff09; 三、以上概念的关系参考资料 一、基本概念 cpu个数 物理cpu个数…

图神经网络系列之序章

文章目录 一、为什么需要图神经网络&#xff1f;二、图的定义1.图的定义和种类2.一些关于图的重要概念2.1 子图2.2 连通图2.3 顶点的度、入度和出度2.4 边的权和网2.5 稠密图、稀疏图 3.图的存储结构3.1 邻接矩阵3.2 邻接表3.3 边集数组3.4 邻接多重表3.5 十字链表3.6 链式前向…