从入门到深入:Vue.js 学习全攻略

news2025/5/9 17:48:46

一、Vue.js 入门基础

(一)Vue.js 简介与环境搭建

Vue.js 是一套用于构建用户界面的渐进式 JavaScript 框架,所谓渐进式,意味着开发者可以根据项目需求,灵活地选择使用 Vue 的功能。它既可以嵌入到简单的 HTML 页面中,为网页添加交互性,也可以用于构建大型单页应用(SPA)。

在开始学习 Vue 之前,需要搭建开发环境。最基础的方式是直接通过<script>标签引入 Vue.js 的 CDN 链接,将其添加到 HTML 文件中,这种方式适合快速体验和小型项目:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>Vue入门</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    {{ message }}
  </div>
  <script>
    new Vue({
      el: '#app',
      data: {
        message: 'Hello Vue!'
      }
    });
  </script>
</body>
</html>

上述代码中,通过new Vue()创建了一个 Vue 实例,el属性指定了 Vue 实例要控制的 HTML 元素,data属性定义了数据,在模板中通过{{ message }}语法可以将数据渲染到页面上。

对于大型项目,推荐使用 Node.js 和 npm(Node Package Manager)来管理项目依赖和构建工具。首先需要安装 Node.js,安装完成后,使用以下命令创建一个基于 Vue 的项目:

npm install -g @vue/cli
vue create my-vue-project

执行上述命令后,会进入一系列交互式的配置选项,根据项目需求选择相应的配置,即可创建一个完整的 Vue 项目,项目中包含了基础的目录结构和配置文件。

(二)Vue 实例与数据绑定

Vue 实例是 Vue 应用的核心,每个 Vue 应用都是通过创建一个 Vue 实例开始的。除了前面提到的eldata属性外,Vue 实例还有许多其他重要的属性和方法。

数据绑定是 Vue 的核心特性之一,它允许将数据与视图进行关联,当数据发生变化时,视图会自动更新。Vue 支持两种主要的数据绑定方式:插值表达式({{ }})和指令。插值表达式用于在 HTML 元素内容中显示数据,而指令则用于操作 HTML 元素的属性和行为。例如,v-bind指令用于绑定 HTML 元素的属性:

<div id="app">
  <img v-bind:src="imageUrl" alt="图片">
</div>
<script>
  new Vue({
    el: '#app',
    data: {
      imageUrl: 'https://example.com/image.jpg'
    }
  });
</script>

上述代码中,v-bind:srcimageUrl数据绑定到<img>标签的src属性上,当imageUrl的值改变时,图片的显示也会相应改变。

(三)指令基础

Vue 提供了丰富的指令,用于实现各种功能。除了v-bind指令外,常见的还有v-on指令用于绑定事件,v-showv-if指令用于控制元素的显示与隐藏,v-for指令用于循环渲染数据。

v-on指令的使用示例:

<div id="app">
  <button v-on:click="count++">点击计数</button>
  <p>计数:{{ count }}</p>
</div>
<script>
  new Vue({
    el: '#app',
    data: {
      count: 0
    }
  });
</script>

在上述代码中,通过v-on:click绑定了一个点击事件,当按钮被点击时,count的值会自增,视图也会随之更新。

v-showv-if虽然都能控制元素的显示与隐藏,但它们的实现原理不同。v-show是通过 CSS 的display属性来控制元素的显示,无论初始条件如何,元素都会被渲染到 DOM 中;而v-if是根据条件动态地创建或销毁元素,只有在条件为真时,元素才会被渲染到 DOM 中。

v-for指令用于循环渲染数组或对象:

<div id="app">
  <ul>
    <li v-for="item in items">{{ item }}</li>
  </ul>
</div>
<script>
  new Vue({
    el: '#app',
    data: {
      items: ['苹果', '香蕉', '橙子']
    }
  });
</script>

上述代码中,v-for指令遍历items数组,并为每个数组元素渲染一个<li>标签。

二、Vue.js 核心进阶

(一)组件化开发

组件化是 Vue.js 开发大型应用的关键。组件是可复用的 Vue 实例,每个组件都有自己的模板、数据、方法和生命周期钩子。通过将应用拆分成多个组件,可以提高代码的复用性和可维护性。

在 Vue 中定义组件有两种方式:全局组件和局部组件。全局组件通过Vue.component()方法注册,在整个 Vue 应用中都可以使用;局部组件则在某个 Vue 实例的components选项中定义,只能在该实例及其子组件中使用。

全局组件示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>组件示例</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    <my-component></my-component>
  </div>
  <script>
    Vue.component('my-component', {
      template: '<div>这是一个全局组件</div>'
    });
    new Vue({
      el: '#app'
    });
  </script>
</body>
</html>

局部组件示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>组件示例</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    <child-component></child-component>
  </div>
  <script>
    var childComponent = {
      template: '<div>这是一个局部组件</div>'
    };
    new Vue({
      el: '#app',
      components: {
        'child-component': childComponent
      }
    });
  </script>
</body>
</html>

组件之间还可以通过 props 进行数据传递,props 是父组件向子组件传递数据的方式;通过事件($emit)实现子组件向父组件传递数据,从而实现组件间的通信。

(二)计算属性与侦听器

计算属性是基于响应式依赖进行缓存的,只有相关响应式依赖发生改变时才会重新求值,适用于需要根据其他数据进行复杂计算并显示的场景。例如:

<div id="app">
  <p>原始数据:{{ num1 }}</p>
  <p>原始数据:{{ num2 }}</p>
  <p>计算结果:{{ sum }}</p>
</div>
<script>
  new Vue({
    el: '#app',
    data: {
      num1: 1,
      num2: 2
    },
    computed: {
      sum: function () {
        return this.num1 + this.num2;
      }
    }
  });
</script>

在上述代码中,sum是一个计算属性,它依赖于num1num2,当num1num2发生变化时,sum会自动重新计算并更新视图。

侦听器(watch)则用于监听数据的变化,并在数据变化时执行特定的操作。它可以用于异步操作或比较复杂的逻辑处理:

<div id="app">
  <input v-model="message">
</div>
<script>
  new Vue({
    el: '#app',
    data: {
      message: ''
    },
    watch: {
      message: function (newValue, oldValue) {
        console.log('数据发生变化,旧值:' + oldValue + ',新值:' + newValue);
      }
    }
  });
</script>

上述代码中,当message的值发生变化时,侦听器函数会被调用,并在控制台输出旧值和新值。

(三)Vue Router 路由

Vue Router 是 Vue.js 官方的路由管理器,用于构建单页应用的路由系统。它允许根据不同的 URL 地址,显示不同的组件内容,实现页面的切换和导航。

在使用 Vue Router 之前,需要先安装它:

npm install vue-router

然后在 Vue 项目中进行配置和使用。首先创建路由组件:

// Home.vue
export default {
  template: '<div>这是首页</div>'
};
// About.vue
export default {
  template: '<div>这是关于页面</div>'
};

接着配置路由:

import Vue from 'vue';
import VueRouter from 'vue-router';
import Home from './components/Home.vue';
import About from './components/About.vue';

Vue.use(VueRouter);

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    component: About
  }
];

const router = new VueRouter({
  routes
});

export default router;

最后在 Vue 实例中使用路由:

import Vue from 'vue';
import App from './App.vue';
import router from './router';

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

在 HTML 模板中,可以通过<router-link>组件实现导航链接,通过<router-view>组件显示当前路由对应的组件内容:

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

三、Vue.js 深入应用

(一)Vuex 状态管理

Vuex 是 Vue.js 的状态管理模式,用于集中管理 Vue 应用的共享数据,解决组件间数据共享和状态管理的问题。它采用单向数据流的方式,使得数据的变化更加可预测和易于调试。

Vuex 包含以下几个核心概念:

  • state:存储应用的状态数据,是响应式的,组件可以通过计算属性来获取状态数据。
  • mutations:用于修改 state 中的数据,必须是同步函数。
  • actions:可以包含异步操作,通过提交 mutations 来修改 state。
  • getters:类似于计算属性,用于对 state 中的数据进行加工和处理,方便组件获取特定格式的数据。

以下是一个简单的 Vuex 示例:

// store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment: function (state) {
      state.count++;
    }
  },
  actions: {
    incrementAsync: function ({ commit }) {
      setTimeout(() => {
        commit('increment');
      }, 1000);
    }
  },
  getters: {
    doubleCount: function (state) {
      return state.count * 2;
    }
  }
});

export default store;

在 Vue 组件中使用 Vuex:

<template>
  <div>
    <p>计数:{{ count }}</p>
    <p>双倍计数:{{ doubleCount }}</p>
    <button @click="increment">自增</button>
    <button @click="incrementAsync">异步自增</button>
  </div>
</template>
<script>
import { mapState, mapGetters, mapMutations, mapActions } from 'vuex';
export default {
  computed: {
   ...mapState(['count']),
   ...mapGetters(['doubleCount'])
  },
  methods: {
   ...mapMutations(['increment']),
   ...mapActions(['incrementAsync'])
  }
};
</script>

(二)Vue.js 项目优化

在实际开发中,随着项目规模的增大,需要对 Vue.js 项目进行优化,以提高应用的性能和用户体验。常见的优化方式包括:

  • 代码分割:将代码按路由或功能模块进行分割,只在需要时加载相应的代码,减少初始加载的文件大小。可以使用 Webpack 的动态导入(import())来实现代码分割。
  • 组件优化:合理使用v-ifv-show,避免不必要的组件重新渲染;使用v-once指令对不需要响应式更新的元素进行一次性渲染。
  • 图片优化:对图片进行压缩处理,使用合适的图片格式(如 WebP),并设置图片的widthheight属性,避免图片加载时的重排和重绘。
  • 缓存策略:对于一些不经常变化的数据,可以使用浏览器缓存或本地存储进行缓存,减少服务器请求。

(三)Vue.js 与其他技术的整合

Vue.js 可以与许多其他技术进行整合,拓展应用的功能。例如,与后端 API 进行交互,可以使用 Axios 库发送 HTTP 请求;与地图服务整合,可以使用 Vue 与百度地图或高德地图的相关插件;与 WebSocket 结合,可以实现实时通信功能。

以 Axios 为例,安装 Axios 后:

npm install axios

在 Vue 项目中使用 Axios:

import Vue from 'vue';
import axios from 'axios';

Vue.prototype.$axios = axios;

// 在组件中使用
export default {
  methods: {
    async fetchData() {
      try {
        const response = await this.$axios.get('https://example.com/api/data');
        console.log(response.data);
      } catch (error) {
        console.error(error);
      }
    }
  }
};

四、学习资源推荐

(一)官方文档

  • Vue 2 官方文档:https://cn.vuejs.org/v2/guide/,详细介绍了 Vue 2 的各种特性、用法和 API,是学习 Vue 2 的权威资料。
  • Vue 3 官方文档:简介 | Vue.js,全面阐述了 Vue 3 的新特性和变化,对于想要深入学习 Vue 3 的开发者来说是必不可少的参考。

(二)学习网站

  • 慕课网:慕课网-程序员的梦工厂,提供了大量的 Vue.js 相关课程,从入门到进阶,涵盖各种实战项目,适合不同阶段的学习者。
  • 网易云课堂:网易云课堂 - 悄悄变强大,有丰富的 Vue.js 课程资源,课程内容丰富多样,包含理论讲解和实际案例。
  • B 站:哔哩哔哩 (゜-゜)つロ 干杯~-bilibili,许多 UP 主分享了 Vue.js 的学习教程和实战经验,视频形式更加生动直观,便于理解。

(三)书籍推荐

  • 《Vue.js 实战》:通过实际案例,详细介绍了 Vue.js 的各种特性和应用场景,适合有一定基础的开发者深入学习和实践。
  • 《Vue.js 设计与实现》:深入剖析 Vue.js 的内部原理和实现机制,对于想要深入理解 Vue.js 运行机制、提升技术水平的开发者来说是一本非常有价值的书籍。

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

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

相关文章

DeepSeek实战--手搓实现Agent

1.背景 要学习AI agent&#xff0c;只会用agent 框架&#xff0c;还不够&#xff0c;一旦框架出现问题&#xff0c;没法快速的排查出问题。 学习就应该“知其然&#xff0c;更应该知其所以然” &#xff0c;今天我们就用编码的方式实现一个简单的agent 。我们模拟一套AI学生评…

线性代数——行列式⭐

目录 一、行列式的定义⭐ 1-1、三阶行列式练习 1-2、下面介绍下三角行列式、上三角行列式、对角行列式 ​编辑 二、行列式的性质 2-1、性质1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6 ​编辑 2-2、性质7 2- 3、拉普拉斯定理、克莱姆法则 三…

iPhone手机连接WiFi异常解决方法

iPhone手机连接WiFi异常解决方法 一、问题现象二、iPhone连不上可能的原因三、基础排查与快速修复第一步:重启大法第二步:忽略网络,重新认证第三步:关闭“私有无线局域网地址”第四步:修改DNS服务器第五步:还原网络设置四、路由器端排查及设置关闭MAC地址过滤或添加到白名…

学习设计模式《八》——原型模式

一、基础概念 原型模式的本质是【克隆生成对象】&#xff1b; 原型模式的定义&#xff1a;用原型实例指定创建对象的种类&#xff0c;并通过拷贝这些原型创建新的对象 。 原型模式的功能&#xff1a; 1、通过克隆来创建新的对象实例&#xff1b; 2、为克隆出来的新对象实例复制…

疗愈服务预约小程序源码介绍

基于ThinkPHP、FastAdmin和UniApp开发的疗愈服务预约小程序源码&#xff0c;这款小程序在功能设计和用户体验上都表现出色&#xff0c;为疗愈行业提供了一种全新的服务模式。 该小程序源码采用了ThinkPHP作为后端框架&#xff0c;保证了系统的稳定性和高效性。同时&#xff0c…

【随笔】Google学术:but your computer or network may be sending automated queries.

文章目录 一、问题复述二、问题原因三、解决 前提&#xff1a;你的xxx是自己做的&#xff0c;你自己可以管理&#xff0c;而不是用的那些劣质✈场。 一、问题复述 &#x1f7e2;如下图所示&#xff1a;可以打开谷歌学术&#xff0c;但是一搜索就是这个界面。 二、问题原因 …

长事务:数据库中的“隐形炸弹“——金仓数据库运维避坑指南

引言&#xff1a;凌晨三点的告警 "张工&#xff01;生产库又告警了&#xff01;"凌晨三点的电话铃声总是格外刺耳。运维团队发现数据库频繁进入单用户模式&#xff0c;排查发现某核心表的年龄值&#xff08;Age&#xff09;已突破20亿大关。经过一夜奋战&#xff0c…

ubuntu nobel + qt5.15.2 设置qss语法识别正确

问题展示 解决步骤 首选项里面的高亮怎么编辑选择都没用。如果已经有generic-highlighter和css.xml&#xff0c;直接修改css.xml文件最直接&#xff01; 在generic-highlighter目录下找到css.xml文件&#xff0c;位置是&#xff1a;/opt/Qt/Tools/QtCreator/share/qtcreator/…

Unity-Socket通信实例详解

今天我们来讲解socket通信。 首先我们需要知道什么是socket通信&#xff1a; Socket本质上就是一个个进程之间网络通信的基础&#xff0c;每一个Socket由IP端口组成&#xff0c;熟悉计网的同学应该知道IP主要是应用于IP协议而端口主要应用于TCP协议&#xff0c;这也证明了Sock…

MATLAB仿真定点数转浮点数(对比VIVADO定点转浮点)

MATLAB仿真定点数转浮点数 定点数可设置位宽&#xff0c;小数位宽&#xff1b;浮点数是单精度浮点数 对比VIVADO定点转浮点 目录 前言 一、定点数 二、浮点数 三、定点数转浮点数 四、函数代码 总结 前言 在FPGA上实现算法时&#xff0c;相比MATLAB实现往往需要更长的开发…

【计算机网络】Cookie、Session、Token之间有什么区别?

大家在日常使用浏览器时可能会遇到&#xff1a;是否清理Cookie&#xff1f;这个问题。 那么什么是Cookie呢&#xff1f;与此相关的还有Session、Token这些。这两个又是什么呢&#xff1f; 本文将对这三个进行讲解区分&#xff0c;如果对小伙伴有帮助的话&#xff0c;也请点赞、…

SpringCloud服务拆分:Nacos服务注册中心 + LoadBalancer服务负载均衡使用

SpringCloud中Nacos服务注册中心 LoadBalancer服务负载均衡使用 前言Nacos工作流程nacos安装docker安装window安装 运行nacos微服务集成nacos高级特性1.服务集群配置方法效果图模拟服务实例宕机 2.权重配置3.环境隔离 如何启动集群节点本地启动多个节点方法 LoadBalancer集成L…

Apache Doris 使用指南:从入门到生产实践

目录 一、Doris 核心概念 1.1 架构组成 1.2 数据模型 二、Doris 部署方式 2.1 单机部署&#xff08;测试环境&#xff09; 2.2 集群部署&#xff08;生产环境&#xff09; 三、数据操作指南 3.1 数据库与表管理 3.2 数据导入方式 3.2.1 批量导入 3.2.2 实时导入 3.…

26届秋招收割offer指南

26届暑期实习已经陆续启动&#xff0c;这也意味着对于26届的同学们来说&#xff0c;“找工作”已经提上了日程。为了帮助大家更好地准备暑期实习和秋招&#xff0c;本期主要从时间线、学习路线、核心知识点及投递几方面给大家介绍&#xff0c;希望能为大家提供一些实用的建议和…

拷贝多个Excel单元格区域为图片并粘贴到Word

Excel工作表Sheet1中有两个报表&#xff0c;相应单元格区域分别定义名称为Report1和Report2&#xff0c;如下图所示。 现在需要将图片拷贝图片粘贴到新建的Word文档中。 示例代码如下。 Sub Demo()Dim oWordApp As ObjectDim ws As Worksheet: Set ws ThisWorkbook.Sheets(&…

【Bluedroid】蓝牙 SDP(服务发现协议)模块代码解析与流程梳理

本文深入剖析Bluedroid蓝牙协议栈中 SDP&#xff08;服务发现协议&#xff09;服务记录的全生命周期管理流程&#xff0c;涵盖初始化、记录创建、服务搜索、记录删除等核心环节。通过解析代码逻辑与数据结构&#xff0c;揭示各模块间的协作机制&#xff0c;包括线程安全设计、回…

中国自动驾驶研发解决方案,第一!

4月28日&#xff0c;IDC《中国汽车云市场(2024下半年)跟踪》报告发布&#xff0c;2024下半年中国汽车云市场整体规模达到65.1亿元人民币&#xff0c;同比增长27.4%。IDC认为&#xff0c;自动驾驶技术深化与生成式AI的发展将为汽车云打开新的成长天花板&#xff0c;推动云计算在…

Kubernetes(k8s)学习笔记(四)--入门基本操作

本文通过kubernetes部署tomcat集群&#xff0c;来学习和掌握kubernetes的一些入门基本操作 前提条件 1.各个节点处于Ready状态&#xff1b; 2.配置好docker镜像库(否则会出现ImagePullBackOff等一些问题)&#xff1b; 3.网络配置正常(否则即使应用发布没问题&#xff0c;浏…

【项目篇之统一硬盘操作】仿照RabbitMQ模拟实现消息队列

统一硬盘操作 创建出实例封装交换机的操作封装队列的操作封装绑定的操作封装消息的操作总的完整代码&#xff1a; 我们之前已经使用了数据库去管理交换机&#xff0c;绑定&#xff0c;队列 还使用了数据文件去管理消息 此时我们就搞一个类去把上述两个部分都整合在一起&#…

基于 GO 语言的 Ebyte 勒索软件——简要分析

一种新的勒索软件变种,采用Go 语言编写,使用ChaCha20进行加密,并使用ECIES进行安全密钥传输,加密用户数据并修改系统壁纸。其开发者EvilByteCode曾开发过多种攻击性安全工具,现已在 GitHub 上公开 EByte 勒索软件。尽管该勒索软件声称仅用于教育目的,但滥用可能会导致严重…