Vue笔记:基础入门(前篇)

news2024/11/26 17:45:57

文章目录

  • 前言
  • 开发环境准备
  • 无构建使用
  • 构建式使用
  • API风格
  • 单文件组件
  • 页面打开时闪烁
  • 后记

前言

Vue(发音为 /vjuː/,类似 view)是一款渐进式Web前端框架,提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。

官方网站:https://cn.vuejs.org/ 或 https://vuejs.org/
在这里插入图片描述

Vue 是一个框架,也是一个生态。其功能覆盖了大部分前端开发常见的需求。但 Web 世界是十分多样化的,不同的开发者在 Web 上构建的东西可能在形式和规模上会有很大的不同。考虑到这一点,Vue 的设计非常注重灵活性和“可以被逐步集成”这个特点。根据你的需求场景,你可以用不同的方式使用 Vue:

  • 无需构建步骤,渐进式增强静态的 HTML
  • 在任何页面中作为 Web Components 嵌入
  • 单页应用 (SPA)
  • 全栈 / 服务端渲染 (SSR)
  • Jamstack / 静态站点生成 (SSG)
  • 开发桌面端、移动端、WebGL,甚至是命令行终端中的界面

本文主要介绍下Vue的基础概念与在前端开发中的使用方式等内容。(基于 Vue3 ,当前版本为 3.2.41

开发环境准备

不管以哪种方式开发,编辑器和相关插件都是需要的,这里使用 VS code 进行开发:
下载地址:https://code.visualstudio.com/
下载安装后需要装 Volar 扩展,见下图:
在这里插入图片描述

如果是以 构建方式 进行开发的话还需要有相关工具支持,这些都是基于 Node.js 的:
Node.js官网:https://nodejs.org/
从官网下载安装,常理来说安装完就可以用了,不过因为大陆网络原因,所以需要科学上网或者使用代理等,比较简单的方式是使用 nrm 换源:

# 全局安装nrm
npm install -g nrm

# 测试可用源速度
nrm test
# 切换源
nrm use <registry>

这部分内容更多介绍可以参考下面文章:
《Node.js入门 01:基础使用与说明》https://blog.csdn.net/Naisu_kun/article/details/120665042
《Node.js入门 02:包管理器npm》https://blog.csdn.net/Naisu_kun/article/details/120663782

无构建使用

无构建使用Vue就和jQuery等很多传统的JS库一样,使用时就是导入JS文件到页面中,在原生Html 的基础上使用这些库提供的API辅助进行开发。

无构建使用最常见的就是通过CDN来使用,官方文档中提到的CDN有下面几个:

  • UNPKG:https://unpkg.com/browse/vue@3/
  • jsDelivr:https://www.jsdelivr.com/package/npm/vue
  • cdnjs:https://cdnjs.com/libraries/vue

下面是最传统的使用方式,全局方式导入:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> <!-- 全局开发版本 -->
    <!-- <script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script> --> <!-- 全局生产版本 -->
</head>
<body>
    <div id="app">{{ message }}</div>
    <script>
        Vue.createApp({
            setup() {
                const message = 'Hello Naisu!';
                return { message };
            }
        }).mount('#app');
    </script>
</body>
</html>

在这里插入图片描述

现在也可以使用ES模块方式导入:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <div id="app">{{ message }}</div>
    <script type="module">
        import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'; // ES模块开发版本
        // import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.prod.js'; // ES模块生产版本
        createApp({
            setup() {
                const message = 'Hello Naisu!';
                return { message };
            }
        }).mount('#app');
    </script>
</body>
</html>

也可以用Import maps方式来导入ES模块:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script type="importmap">
        {
          "imports": {
            "vue": "https://unpkg.com/vue@3/dist/vue.esm-browser.js" // 导入模块命名为vue
          }
        }
    </script>
</head>
<body>
    <div id="app">{{ message }}</div>
    <script type="module">
        import { createApp } from 'vue'; // 使用模块
        createApp({
            setup() {
                const message = 'Hello Naisu!';
                return { message };
            }
        }).mount('#app');
    </script>
</body>
</html>

在这里插入图片描述

也可以将库文件下载到本地使用:
从 https://www.jsdelivr.com/package/npm/vue 下载比较方便,下载后库文件都在 package/dist/ 目录下:
在这里插入图片描述

也可以使用 npm i vue 命令进行下载,下载后库文件都在 node_modules/vue/dist/ 目录下。

需要注意的是如果使用ES模块的话是不支持以文件形式访问的,本地测试时可以使用 Live Server 扩展启用HTTP服务以正常访问:
在这里插入图片描述

构建式使用

构建式的使用Vue是比较被推荐的方式,这个和传统的外挂一个库的方式使用就有较大差别了,可以最大程度的发挥Vue的特点。目前Vue项目构建都是依赖 Vite 工具进行的,当然入门使用时不用关注到这些具体的细节。

使用 npm init vue@latest 命令即可生成基本的Vue项目框架,根据提示选择相关的功能,最终会在当前目录下生成项目文件夹:
在这里插入图片描述

进入项目文件夹使用 npm install 命令可以安装所需要的模块。然后使用 npm run dev 命令即可运行项目,可以在浏览器中查看效果:
在这里插入图片描述
使用 Ctrl + C 终止当前运行。

当准备将应用发布到生产环境时可以运行 npm run build 命令,这将在项目文件夹下生成 dist 目录,其中的所有内容就是最终可以部署到服务器上的文件了。需要注意的是默认情况下这些文件是不支持以文件形式访问的,本地测试时可以使用 Live Server 扩展启用HTTP服务以正常访问:
在这里插入图片描述

API风格

Vue的提供了两套风格的API,组合式API选项式API ,两套API能够实现的基本功能都是一样的,更多的只是表达形式上的差别。

组合式 API (Composition API)
下面是使用组合式API的一个例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
    <div id="app">
        <!-- button的 increment 方法和 count 变量来自于下面的js代码 -->
        <button @click="increment">count is: {{ count }}</button>
    </div>
    <script>
        const { createApp, ref, onUpdated } = Vue // 导入用到的内容
        createApp({
            setup() {
                const count = ref(0) // 响应式状态变量

                function increment() { count.value++ } // 一个方法

                onUpdated(() => { alert(`DOM更新,数据变为${count.value}`) }) // 更新事件(生命周期钩子)

                return { count, increment }
            }
        }).mount('#app') // 创建应用挂载到ID为app的元素上
    </script>
</body>
</html>

在这里插入图片描述
组合式API的风格看上去和一般的JS代码差不多,无非就是处理组件的值、方法、事件等内容。

组合式API差不多就只是在JS的基础上提供了一些VUE的API而已,这种方式对JS的使用者来说比较容易上手,灵活性也更加好。

选项式 API (Options API)
下面是使用选项式API的一个例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
    <div id="app">
        <!-- button的 increment 方法和 count 变量来自于下面的js代码 -->
        <button @click="increment">count is: {{ count }}</button>
    </div>
    <script>
        const { createApp, ref, onUpdated } = Vue // 导入用到的内容
        createApp({
            //data() 返回的属性将会成为响应式的状态
            // 并且暴露在 `this` 上
            data() { 
                return {
                    count: 0
                }
            },
            // methods 是一些用来更改状态与触发更新的函数
            // 它们可以在模板中作为事件监听器绑定
            methods: {
                increment() {
                    this.count++
                }
            },
            // 生命周期选项会在组件生命周期的各个不同阶段被调用
            updated() { // 更新事件
                alert(`DOM更新,数据变为${this.count}`)
            }
        }).mount('#app') // 创建应用挂载到ID为app的元素上
    </script>
</body>
</html>

在这里插入图片描述
前面组合式API的例子中代码无非是处理组件的值、方法、事件等内容,所以Vue中干脆就把这些内容单独提取出来处理,这就是选项式API了。

选项式API是在组合式API的基础上实现的。选项式API视觉上来说更加只管,对新手更加友好;而组合式API在使用上会更加灵活。

单文件组件

构建式使用的情况下可以使用 单文件组件*.vue 文件,,英文 Single-File Components,缩写为SFC)。Vue 的单文件组件将一个组件的逻辑 (JavaScript),模板 (HTML) 和样式 (CSS) 封装在同一个文件里。

下面是个最基本的例子:
在这里插入图片描述

组件之间也可以互相引用:
在这里插入图片描述

单文件组件最大的好处是你可以把组件相关的所有内容都封装在一个文件中,方便管理和重复利用。

在无构建使用时虽然不能使用单组件文件,但可以在一定程度上近似使用(注意组件名大小写问题):
在这里插入图片描述

这个方式主要没法实现的就是组件样式定义了。另外上面方式中 template 以字符串形式写 html 可能看上去比较变扭,可以使用 es6-string-html 插件在一定程度上处理这个问题:
在这里插入图片描述

页面打开时闪烁

Vue在使用时有可能会碰到的一个问题时页面打开时闪烁(严格来说这个现象叫做 未编译模板闪现 ),比如下面代码,在初次打开时先是显示 {{ message }} 闪烁一下之后才显示 Hello Naisu!

<div id="app">
    {{ message }}
</div>
<script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';
    createApp({
        setup() {
            const message = 'Hello Naisu!';
            return { message };
        }
    }).mount('#app');
</script>

出现这个问题的原因是这样的:

  • 页面加载时加载到 {{ message }} 的时候Vue还没开始工作,所以会显示默认html内容;
  • 等到Vue开始工作后这些内容才被解析,最终显示为 Hello Naisu!

在知到原理的情况下处理这个问题就比较简单了,主要有两种方式:

  1. 在div app中不放置内容,所有内容都通过 Vue.createApp() 方法以根组件形式加载;
  2. 默认使用CSS将div app隐藏,等Vue工作后才显示,比如上面代码可以改写为下面那样;
<style>
    [v-cloak] {
        display: none;
    }
</style>
<!-- v-cloak 会保留在所绑定的元素上,直到相关组件实例被挂载后才移除 -->
<div v-cloak id="app">
    {{ message }}
</div>
<script type="module">
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';
    createApp({
        setup() {
            const message = 'Hello Naisu!';
            return { message };
        }
    }).mount('#app');
</script>

后记

本文主要介绍下Vue的基础概念与在前端开发中的使用方式等内容。这些内容是入门使用中最基础需要了解的,在这之上就是具体的基于Vue提供的API的具体功能与使用方法了,这部分内容将在后篇中进行介绍。

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

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

相关文章

上海亚商投顾:沪指缩量跌0.43%

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日集体回调&#xff0c;沪指午后跌近1%&#xff0c;创业板指盘中跌超1.7%&#xff0c;临近尾盘跌幅有所…

字符串查询--Python

str1 hello python index 需求:查找p所在的索引位置 格式: 字符串.index(self(不用传值), sub(子字符串), start(起始位置), end(结束位置)) print(str1.index(p)) # 6 如果字符串中含有多个子字符串,则会返回指定范围内的从左至右的第一个查找到的子字符串位置索引 print…

开源组件搭建完整的Kubernetes-Devops平台方案

文章目录平台六大模块K8S自动化运维容器平台&#xff08;Rancher Kubernetes&#xff09;CI/CD自动构建自动部署平台&#xff08;Jenkins Harbor Helms&#xff09;监控告警平台&#xff08;PrometheusGrafana&#xff09;微服务ServiceMesh平台&#xff08;Lstio&#xff0…

Linux如何写C语言

想要在Linux系统上写C语言程序&#xff0c;需要有两个东西&#xff1a; vim编辑器gcc编译器 下载 vim 和 gcc&#xff1a; 先切换到root用户状态 &#xff0c;输入 sudo passwd root //设置密码然后输入 su root //切换到root用户状态在root用户状态下&#xff0c;输入 apt in…

CMOS电路基础知识,包括NMOS、PMOS,以及由它们构成的非门、与非、或非等门电路,和版图绘制(L-edit16.3)

CMOS电路基础知识,包括NMOS、PMOS,以及由它们构成的非门、与非、或非等门电路,和版图绘制(L-edit16.3) 1,CMOS门电路1)PMOS和NMOS电路结构2)`MOS管结构的工作原理`,如NMOS管结构2,非门电路结构,即反相器3,与非门和或非门、与门和或门4,传输门+数据选择器。1,CMOS…

第四章:Redis--一站式高性能存储方案(包含下载)

Redis概述 Redis是一 款基于键值对的NoSQL数据库&#xff0c;它的值支持多种数据结构。 key都是一个String类型&#xff0c;但value的类型包含以下&#xff1a; 字符串(strings)、哈希(hashes)、 列表(lists)、 集合(sets)、 有序集合(sorted sets)等 Redis将所有的数据都存放…

【1684. 统计一致字符串的数目】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中&#xff0c;就称这个字符串是 一致字符串 。 请你返回 words 数组中 一致字符串 的数…

ElasticSearch系列——Kibana,核心概念

ElasticSearch系列——Kibana&#xff0c;核心概念Kibana下载地址Windows安装修改配置文件启动Kibana验证ES核心概念Index索引Mapping映射Document文档使用Kibana对ES进行操作查询所有索引查询指定索引创建索引指定分片和副本数删除索引创建映射查看指定索引的映射信息映射无法…

网络安全基础入门-概念名词

目录 网络安全学习&#xff08;2022.10.23&#xff09; 一、基础入门——概念名词 DNS 脚本语言 后门&#xff08;2022.11.06&#xff09; WEB WEB相关安全漏洞 演示案例 网络安全学习&#xff08;2022.10.23&#xff09; 一、基础入门——概念名词 查询网站&#xff…

【Linux】进程概念与进程状态

文章目录一、什么是进程1、进程概念2、进程描述 -- PCB二、进程的一些基本操作1、查看进程2、结束进程2、通过系统调用获取进程标示符3、通过系统调用创建子进程三、进程状态1、普适的操作系统层面2、具体Linux操作系统层面四、两种特殊的进程1、僵尸进程2、孤儿进程五、进程优…

社科研究中的问卷设计详解

文章目录参考的文献和网站等资源&#xff1a;参考的up主的讲解B站北师大钱婧老师、参考B站up除草姬&#xff1a;参考的书籍查阅过程中给自己补充的问卷基础知识cssci一篇关于兴趣问卷的案例分析看懂这篇论文需要补充的知识点SPSS和Mplus中如何操作参考的文献和网站等资源&#…

C语言从0到1之《三子棋》的实现

&#x1f57a;作者启明星使 &#x1f383;专栏&#xff1a;《数据库》《C语言》 &#x1f3c7;分享一句话&#xff1a; 沉香&#xff1a;差一点&#xff0c;怎么总是差一点 杨戬&#xff1a;一定是练功的时候总是差不多&#xff0c;到了关键的时候就是差一点 大家一起加油&…

Android Studio开发之应用组件Application的讲解及实战(附源码,通过图书管理信息系统实战)

需要源码请点赞关注收藏后评论区留言~~ 一、Application的生命周期 Application是Android的一大组件&#xff0c;在APP运行过程中有且仅有一个Application对象贯穿应用的整个生命周期 打开AndroidMainfest.xml 发现activity节点的上级正是application节点&#xff0c;不过该节…

手把手带你搭建个人博客系统(一)

⭐️前言⭐️ 该web开发系统涉及到的知识&#xff1a; Java基础MySQL数据库JDBC技术前端三件套&#xff08;HTMLCSSJavaScript&#xff09;Servlet 使用到的开发工具&#xff1a; ideavscodetomcatpostmanFiddler 博主将会手把手带你搭建个人博客系统。 因文章篇幅较长&am…

【Spring boot 静态资源处理】

默认静态资源处理 Spring Boot 默认为我们提供了静态资源处理&#xff0c;使用 WebMvcAutoConfiguration 中的配置各种属性。 建议大家使用 Spring Boot 的默认配置方式&#xff0c;如果需要特殊处理的再通过配置进行修改。 如果想要自 己 完 全 控 制 WebMVC &#xff0c;就需…

快速创建django项目管理系统流程

首先创建django project&#xff0c;虚拟环境选择我已经有的虚拟环境&#xff0c;下面是创建后的画面&#xff0c;简单的框架模板&#xff0c;需要配置改动一些代码参数&#xff0c;才能适合我自己的习惯。 这里我经常用到的习惯必须导入的是simpleui库&#xff0c;还有django的…

基于STM32-Socket-Qt 遥控小车(一代)

文章目录一、项目分析1. 项目简介2. 知识储备3. 硬件选择二、STM32部分三、QT部分四、遥控小车演示程序源码一、项目分析 1. 项目简介 本项目本质为客户端与服务器之间的通信&#xff0c;通过发送不同的指令&#xff0c;服务器和客户端进行不同的操作。 客户端&#xff1a;基…

声学特征提取

声学特征提取流程图 语谱图 语谱图的横坐标是时间&#xff0c;纵坐标是频率&#xff0c;坐标点值为语音数据能量。由于是采用二维平面表达三维信息&#xff0c;所以能量值的大小是通过颜色来表示的&#xff0c;颜色深&#xff0c;表示该点的语音能量越强。 语谱图形成过程 …

zabbix监控Linux

1. 环境配置&#xff1a; 主机名主机地址操作系统角色zabbix192.168.188.201Rocky Linux release 8.6zabbix-servernode1192.168.188.111CentOS7zabbix-agent 2. 配置zabbix客户端&#xff1a; 1>. 下载并安装zabbix客户端&#xff1a; [rootnode1 ~]# wget https://mi…

Ubuntu 22.04安装Cuda11.7和cudnn

安装显卡驱动 打开‘软件和更新。 点击附加驱动安装显卡驱动 如果已经安装显卡驱动&#xff0c;请忽略上面的步骤。 安装gcc 新安装的Ubuntu22.04 没有安装gcc&#xff0c;需要安装gcc。在终端输入gcc -version 查看有没有gcc。 执行命令 sudo apt install gcc安装CUDA …