Vue 项目开发常用知识点

一、基础语法与指令

1. 插值表达式

插值表达式是 Vue 中最基础的数据绑定方式,使用双大括号{{ }}将数据包裹起来,例如{{ message }},它会将 Vue 实例中的message属性的值渲染到页面相应位置。这种方式可以方便地在页面中展示动态数据,如从后端获取的数据或者用户输入的信息。

2. 指令

Vue 提供了一系列指令来增强 HTML 的功能。

  • v-bind:用于动态绑定 HTML 属性,缩写为:。例如<img v-bind:src="imageSrc">,可以根据imageSrc变量的值动态改变图片的源地址。
  • v-on:用于绑定事件监听器,缩写为@。比如<button v-on:click="handleClick">点击我</button>,当按钮被点击时,会触发handleClick方法。
  • v-model:实现双向数据绑定,常用于表单元素。例如<input v-model="inputValue">,用户在输入框中输入的值会自动同步到inputValue变量,反之亦然。
  • v-ifv-show:用于控制元素的显示与隐藏。v-if是真正的条件渲染,会根据条件决定元素是否被添加到 DOM 中;v-show则是通过 CSS 的display属性来控制元素的可见性,元素始终在 DOM 中存在。

二、组件化开发

1. 组件的创建与注册

在 Vue 中,组件是构建应用的核心单元。可以使用Vue.component方法全局注册组件,或者在单文件组件(.vue文件)中局部注册。一个简单的全局组件示例如下:

javascript

Vue.component('my-component', {template: '<div>这是一个自定义组件</div>'
})

在单文件组件中,结构更加清晰:

vue

<template><div>这是一个局部组件</div>
</template><script>
export default {name: 'MyLocalComponent'
}
</script>

2. 组件通信

组件之间的通信是项目开发中常见的需求。

  • 父子组件通信:父组件可以通过props向子组件传递数据,子组件通过$emit触发自定义事件向父组件传递消息。例如,父组件:

vue

<template><div><child-component :message="parentMessage" @child-event="handleChildEvent"></child-component></div>
</template><script>
import ChildComponent from './ChildComponent.vue'export default {components: {ChildComponent},data() {return {parentMessage: '来自父组件的消息'}},methods: {handleChildEvent(payload) {console.log('收到子组件消息:', payload)}}
}
</script>

子组件:

vue

<template><div><p>{{ message }}</p><button @click="sendMessageToParent">向父组件发送消息</button></div>
</template><script>
export default {props: ['message'],methods: {sendMessageToParent() {this.$emit('child-event', '这是子组件发送的消息')}}
}
</script>

  • 非父子组件通信:可以使用 Vuex 状态管理库或者事件总线(Event Bus)来实现。事件总线的实现方式如下:

首先创建一个事件总线实例:

javascript

// event-bus.js
import Vue from 'vue'
export const EventBus = new Vue()

然后在组件中使用:

组件 A 发送事件:

vue

<template><div><button @click="sendMessage">发送消息</button></div>
</template><script>
import { EventBus } from './event-bus.js'export default {methods: {sendMessage() {EventBus.$emit('global-event', '这是组件 A 发送的消息')}}
}
</script>

组件 B 接收事件:

vue

<template><div>接收消息的组件 B</div>
</template><script>
import { EventBus } from './event-bus.js'export default {mounted() {EventBus.$on('global-event', (message) => {console.log('组件 B 收到消息:', message)})},beforeDestroy() {EventBus.$off('global-event')}
}
</script>

三、Vue 路由

Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的页面导航。

1. 路由的基本配置

首先安装 Vue Router:

bash

npm install vue-router

然后在main.js中引入并使用:

javascript

import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
import Home from './views/Home.vue'
import About from './views/About.vue'Vue.use(VueRouter)const routes = [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About}
]const router = new VueRouter({routes
})new Vue({router,render: h => h(App)
}).$mount('#app')

在组件中通过<router-link><router-view>来实现页面跳转和视图渲染:

vue

<template><div><router-link to="/">首页</router-link><router-link to="/about">关于</router-link><router-view></router-view></div>
</template>

2. 动态路由与路由参数

可以在路由路径中定义动态参数,例如:

javascript

const routes = [{path: '/user/:id',name: 'User',component: User}
]

在组件中通过$route.params获取路由参数:

vue

<template><div>用户 ID:{{ $route.params.id }}</div>
</template>

3. 路由导航守卫

路由导航守卫可以用于在路由跳转前进行权限验证、页面加载前的数据获取等操作。例如:

javascript

const router = new VueRouter({routes
})router.beforeEach((to, from, next) => {// 检查用户是否登录const isLoggedIn = falseif (to.meta.requiresAuth &&!isLoggedIn) {next('/login')} else {next()}
})

在路由配置中可以设置meta字段来指定是否需要权限验证:

javascript

const routes = [{path: '/admin',name: 'Admin',component: Admin,meta: {requiresAuth: true}}
]

四、Vuex 状态管理

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

1. Vuex 的核心概念

  • State:存储应用的状态数据,是单一数据源。例如:

javascript

const store = new Vuex.Store({state: {count: 0}
})

  • Mutations:用于修改 State 的唯一途径,是同步函数。例如:

javascript

const store = new Vuex.Store({state: {count: 0},mutations: {increment(state) {state.count++}}
})

  • Actions:用于处理异步操作,如发送 AJAX 请求等,通过提交 Mutations 来间接修改 State。例如:

javascript

const store = new Vuex.Store({state: {count: 0},mutations: {increment(state) {state.count++}},actions: {incrementAsync({ commit }) {setTimeout(() => {commit('increment')}, 1000)}}
})

  • Getters:类似于计算属性,用于从 State 中派生出一些新的数据。例如:

javascript

const store = new Vuex.Store({state: {todos: [{ id: 1, text: '学习 Vue', done: false },{ id: 2, text: '做项目', done: true }]},getters: {doneTodos(state) {return state.todos.filter(todo => todo.done)}}
})

2. 在组件中使用 Vuex

在组件中可以通过this.$store访问 Vuex 实例,从而获取 State、触发 Actions 等。例如:

vue

<template><div><p>计数:{{ count }}</p><button @click="increment">加 1</button><button @click="incrementAsync">异步加 1</button></div>
</template><script>
export default {computed: {count() {return this.$store.state.count}},methods: {increment() {this.$store.commit('increment')},incrementAsync() {this.$store.dispatch('incrementAsync')}}
}
</script>

五、生命周期钩子

Vue 组件在创建、更新和销毁的过程中会经历一系列的生命周期钩子函数,开发者可以在这些钩子函数中执行特定的操作。

  • beforeCreate:在实例初始化之后,数据观测(data observer)和event/watcher事件配置之前被调用。此时,组件的选项对象还未初始化,this指向当前组件实例,但无法访问到datamethods等属性。
  • created:在实例创建完成后被立即调用。此时,实例已完成以下配置:数据观测(data observer)、属性和方法的运算、watch/event事件回调。然而,挂载阶段还未开始,$el属性目前不可见。
  • beforeMount:在挂载开始之前被调用:相关的render函数首次被调用。此时,模板编译成渲染函数,但尚未挂载到页面上,this.$el还未生成。
  • mountedel被新创建的vm.$el替换,并挂载到实例上去之后调用该钩子。此时,组件已经渲染到页面上,可以进行 DOM 操作,获取this.$el等。
  • beforeUpdate:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。
  • updated:由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。此时,组件的 DOM 已经更新,适合执行依赖于 DOM 的操作。
  • beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。可以在这个钩子中清除定时器、解绑事件监听器等。
  • destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

例如:

vue

<template><div>{{ message }}</div>
</template><script>
export default {data() {return {message: '初始消息'}},beforeCreate() {console.log('beforeCreate')},created() {console.log('created')},beforeMount() {console.log('beforeMount')},mounted() {console.log('mounted')},beforeUpdate() {console.log('beforeUpdate')},updated() {console.log('updated')},beforeDestroy() {console.log('beforeDestroy')},destroyed() {console.log('destroyed')}
}
</script>

当组件的数据发生变化或者组件被销毁时,相应的生命周期钩子函数会被触发。

六、过渡与动画

Vue 提供了内置的过渡效果和动画支持,可以让页面元素的切换更加平滑和生动。

1. 单元素 / 组件的过渡

使用<transition>组件包裹需要过渡的元素或组件,并定义过渡类名。例如:

vue

<transition name="fade"><p v-if="show">这是一个过渡效果示例</p>
</transition><button @click="show =!show">切换显示</button>

在 CSS 中定义过渡类名对应的样式:

css

.fade-enter-active,
.fade-leave-active {transition: opacity 0.5s;
}
.fade-enter,
.fade-leave-to {opacity: 0;
}

2. 列表过渡

对于列表元素的过渡,可以使用<transition-group>组件。例如:

vue

<transition-group name="list" tag="ul"><li v-for="(item, index) in list" :key="index">{{ item }}</li>
</transition-group><button @click="addItem">添加项目</button>

在 CSS 中定义列表过渡类名的样式:

css

.list-enter-active,
.list-leave-active {transition: all 0.5s;
}
.list-enter,
.list-leave-to {opacity: 0;transform: translateX(30px);
}

在 JavaScript 中定义添加项目的方法:

javascript

export default {data() {return {list: ['项目 1', '项目 2']}},methods: {addItem() {this.list.push('新项目')}}
}

七、网络请求

在 Vue 项目中,通常使用axios库来进行网络请求。

首先安装axios

bash

npm install axios

然后在组件中使用:

vue

<template><div><ul><li v-for="user in users">{{ user.name }}</li></ul></div>
</template><script>
import axios from 'axios'export default {data() {return {users: []}},mounted() {axios.get('https://jsonplaceholder.typicode.com/users').then(response => {this.users = response.data}).catch(error => {console.log(error)})}
}
</script>

axios支持多种请求方式,如GETPOSTPUTDELETE等,并可以设置请求头、请求参数等。

八、错误处理

在 Vue 项目中,错误处理是确保应用稳定性的重要环节。

1. 组件内错误处理

可以在组件的生命周期钩子函数或者方法中使用try...catch语句来捕获错误。例如:

vue

<template><div><button @click="fetchData">获取数据</button></div>
</template><script>
export default {methods: {fetchData() {try {// 可能出错的代码const result = someFunctionThatMayThrowError()console.log(result)} catch (error) {console.log('组件内错误:', error)}}}
}
</script>

2. 全局错误处理

使用Vue.config.errorHandler可以设置全局的错误处理函数,用于捕获所有组件渲染和生命周期钩子函数中的错误。例如:

javascript

Vue.config.errorHandler = function (err, vm, info) {// 处理错误console.log('全局错误:', err, vm, info)
}

3. 路由导航错误处理

在 Vue Router 中,可以通过路由的onError方法来处理路由导航过程中的错误。例如:

javascript

const router = new VueRouter({routes
})router.onError((error) => {console.log('路由导航错误:', error)
})

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

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

相关文章

【Web开发基础学习——corsheaders 应用的理解】

Web开发基础学习系列文章目录 第一章 基础知识学习之corsheaders 应用的理解 文章目录 Web开发基础学习系列文章目录前言一、使用1.1 安装1.2 配置 二、功能总结 前言 corsheaders 是一个 Django 第三方应用&#xff0c;用于处理跨域资源共享 (CORS)。CORS 是一种机制&#x…

【简单好抄保姆级教学】javascript调用本地exe程序(谷歌,edge,百度,主流浏览器都可以使用....)

javascript调用本地exe程序 详细操作步骤结果 详细操作步骤 在本地创建一个txt文件依次输入 1.指明所使用注册表编程器版本 Windows Registry Editor Version 5.00这是脚本的第一行&#xff0c;指明了所使用的注册表编辑器版本。这是必需的&#xff0c;以确保脚本能够被正确解…

Milvus 2.5:全文检索上线,标量过滤提速,易用性再突破!

01. 概览 我们很高兴为大家带来 Milvus 2.5 最新版本的介绍。 在 Milvus 2.5 里&#xff0c;最重要的一个更新是我们带来了“全新”的全文检索能力&#xff0c;之所以说“全新”主要是基于以下两点&#xff1a; 第一&#xff0c;对于全文检索基于的 BM25 算法&#xff0c;我们采…

【数据分析】布朗运动(维纳过程)

文章目录 一、概述二、数学布朗运动2.1 数学定义2.2 布朗运动的数学模型2.21 标准布朗运动2.22 布朗运动的路径2.23 布朗运动的方程 三、布朗运动在金融学中的应用四、数学构造&#xff08;以傅里叶级数为例&#xff09;4.1 傅里叶级数的基本思想4.2 构造布朗运动 一、概述 布…

Spring Cloud(Kilburn 2022.0.2版本)系列教程(五) 服务网关(SpringCloud Gateway)

Spring Cloud(Kilburn 2022.0.2版本)系列教程(五) 服务网关(SpringCloud Gateway) 一、服务网关 1.1 什么是网关 在微服务架构中&#xff0c;服务网关是一个至关重要的组件。它作为系统的入口&#xff0c;负责接收客户端的请求&#xff0c;并将这些请求路由到相应的后端服务…

即时通讯| IM+RTC在AI技术加持下的社交体验

即时通讯作为互联网的重要应用之一&#xff0c;见证了中国互联网30年发展的辉煌历程。 它从最初的文字交流&#xff0c;发展到如今的语音、视频通话&#xff0c;甚至是虚拟现实社交&#xff0c;已经渗透到生活的社交、娱乐、商务等方方面面&#xff0c;成为现代社会不可或缺的一…

【docker】docker常用命令汇总

1.Docker 常用命令总结表格 Docker 环境信息命令 命令作用docker version查看 Docker 客户端和服务端的版本信息docker info查看 Docker 系统的详细信息&#xff0c;包括存储驱动、内核版本等docker inspect <name or id>获取容器或镜像的详细配置信息docker system df…

【Java基础入门篇】一、变量、数据类型和运算符

Java基础入门篇 一、变量、数据类型和运算符 1.1 变量 计算机中的数据表示方式是&#xff1a;“二进制(0/1)”&#xff0c;但是同时也可以兼容其他进制&#xff0c;例如八进制、十进制、十六进制等。 Java变量的本质是&#xff1a;存储在固定空间的内容&#xff0c;变量名是…

鸿蒙技术分享:Navigation页面管理-鸿蒙@fw/router框架源码解析(二)

theme: smartblue 本文是系列文章&#xff0c;其他文章见&#xff1a;鸿蒙fw/router框架源码解析&#xff08;一&#xff09;-Router页面管理 鸿蒙fw/router框架源码解析 介绍 fw/router是在HarmonyOS鸿蒙系统中开发应用所使用的开源模块化路由框架。该路由框架基于模块化开…

【博主推荐】C#的winfrom应用中datagridview常见问题及解决方案汇总

文章目录 1.datagridview绘制出现鼠标悬浮数据变空白2.datagridview在每列前动态添加序号2.1 加载数据集完成后绘制序号2.2 RowPostPaint事件绘制 3.datagridview改变行样式4.datagridview后台修改指定列数据5.datagridview固定某个列宽6.datagridview某个列的显示隐藏7.datagr…

宠物领养平台构建:SpringBoot技术路线图

摘 要 如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一些新的技术&#xff0c;而新技术的产生往往是为了解决现有问题而产生的。针对于宠物领养…

使用经典的Java,还是拥抱新兴的Rust?

在当代互联网时代的企业级开发中&#xff0c;技术栈的选择往往牵动着每个团队的神经。随着Rust语言的崛起&#xff0c;许多开发团队开始重新思考&#xff1a;是继续坚持使用经典的Java&#xff0c;还是拥抱新兴的Rust&#xff1f;这个问题背后&#xff0c;折射出的是对技术演进…

springboot学习-jdbc,jdbc-client,spring-data-jdbc

晚上又看了Dan Vega的视频&#xff0c;讲解了jdbc在spring 的发展史。 jdbc: sql语句&#xff0c;手工梳理result&#xff0c;并循环。最原始的JAVA API&#xff0c;从1998年JAVA1.0就有了。jdbc template: sql语句&#xff0c;手工处理result ,不用循环了。--从spring诞生就有…

卸载snap docker一直卡住:Save data of snap “docker“ in automatic snapshot set #3

在卸载 Snap 安装的 Docker 时卡住&#xff0c;通常是因为 Snap 在执行卸载时会先尝试保存一些快照&#xff08;自动或手动创建的&#xff09;&#xff0c;并且该过程可能因某些原因而卡住。为了解决这个问题&#xff0c;你可以按照以下步骤强制删除 Snap 安装的 Docker&#x…

Java项目运行报错“java: -source 1.5 中不支持 diamond 运算符“解决办法windows/linux系统踩坑实录

文章目录 一、问题描述二、解决方案 一、问题描述 在接手同事的Java项目时&#xff0c;依赖和打包都能正常操作&#xff0c;但一点击运行项目&#xff0c;就会报错&#xff1a; java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符…

SQL基础入门 —— SQL概述

目录 1. 什么是SQL及其应用场景 SQL的应用场景 2. SQL数据库与NoSQL数据库的区别 2.1 数据模型 2.2 查询语言 2.3 扩展性 2.4 一致性与事务 2.5 使用场景 2.6 性能与扩展性 总结 3. 常见的SQL数据库管理系统&#xff08;MySQL, PostgreSQL, SQLite等&#xff09; 3.…

开源项目:纯Python构建的中后台管理系统

来源&#xff1a;Python大数据分析 费弗里 大家好我是费老师&#xff0c;目前市面上有很多开源的「中后台管理系统」解决方案&#xff0c;复杂如「若依」那种前端基于Vue&#xff0c;后端基于Java的框架&#xff0c;虽然其提供了较为完善的一整套前后端分离权限管理系统解决方…

视频video鼠标移入移除展示隐藏(自定义控件)

效果图 代码 <template><div class"video-container" mouseover"showControls" mouseleave"hideControlsAfterDelay"><videoref"video"loadedmetadata"initializePlayer"timeupdate"updateProgress&qu…

【连接池】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

ubuntu24.04安装Kubernetes1.31.0(k8s1.30.0)高可用集群

ubuntu24.04安装Kubernetes1.30.0(kubernetes1.30.0)高可用集群 一、总体概览 目前最新版的K8S版本应该是1.31.0,我们安装的是第二新的版本1.30.0,因为有大神XiaoHH Superme指路,所以基本上没踩坑,很顺利就搭建完成了。所有的机器都采用的最新版Ubuntu-Server-24.04长期支…