Vue3 简介

news2024/9/27 17:35:26

Vue3简介

01 Vue

  • vue 是一个前端的框架,主要负责帮助我们构建用户的界面
  • MVVM:Model - View - View Model
  • vue 负责 vm 的工作(视图模型),通过 vue 可以将视图和模型相关联。
    • 当模型发生变化时,视图会自动更新
    • 也可以通过视图去操作模型
  • vue 思想:
    • 组件化开发
    • 声明式的编程

02 Hello World

编写Vue代码一般步骤

  1. 创建一个根组件
  2. 创建app实例
  3. 将实例在页面中挂载
  4. 准备一个div容器,页面

注意

组件用来创建组件实例(VM),组件是组件实例的模板
组件 --> 组件生成组件实例 --> 虚拟DOM --> DOM(在页面中呈现)

<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <!-- 引入vue -->
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    </head>
    <body>
        <div id="app"></div>

        <script>
            // 编写vue代码
            // 创建一个根组件,在vue3中组件就是一个普通的js对象
            // 组件用来创建组件实例,组件是组件实例的模板
            // 组件 --> 组件生成组件实例 --> 虚拟DOM --> DOM(在页面中呈现)
            const Root = {
                template: "<h1>我爱Vue</h1>" // 希望组件在页面中呈现的样子
            }

            // 创建app实例
            //const app = Vue.createApp(Root)
            // 将实例在页面中挂载
            //app.mount("#app")

            Vue.createApp(Root).mount("#app")
        </script>
    </body>
</html>

03 data

举例:

<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <!-- 引入vue -->
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    </head>
    <body>
        <div id="app"></div>

        <script>
            // 编写vue代码
            // 创建一个根组件,在vue3中组件就是一个普通的js对象
            // 组件用来创建组件实例,组件是组件实例的模板
            // 组件 --> 组件生成组件实例 --> 虚拟DOM --> DOM(在页面中呈现)
            const Root = {
                data() {
                    return {
                        message: "Vue好棒!" // data方法返回的对象,其中的属性会自动添加到组件实例中
                    }
                }, // data是一个函数,需要一个对象作为返回值

                // 在模板中可以直接访问组件实例中的属性
                // 在模板中可以通过 {{属性名}} 来访问到组件实例中的属性
                template: "<h1>我爱Vue,{{message}}</h1>" // 希望组件在页面中呈现的样子
            }

            // 创建app实例
            //const app = Vue.createApp(Root)
            // 将实例在页面中挂载
            //app.mount("#app")

            Vue.createApp(Root).mount("#app")
        </script>
    </body>
</html>

data 的数据如果是从服务器传过来JSON数据,那么我们就可以呈现到页面

04 按钮练习

为什么创建组件实例?

创建组件实例方便组件被使用的时候,组件跟组件之前相互独立,data里面函数返回,每次返回对象不同,组件就独立了
如果只创建组件,直接使用组件会产生影响,是同一个对象

<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <!-- 引入vue -->
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    </head>
    <body>
        <div id="app">
            <!-- 
                如果直接将模板定义到网页中,此时模板必须符合html的规范
                My-Button -> my-button

                如果在组件中定义template,则会优先使用template作为模板,
                    同时根元素中的所有内容,都会被替换
                如果在组件中没有定义template,则会使用根元素的innerHTML作为模板使用
                
            -->
            <!-- <button @click="count++">点我一下</button> - 点了{{count}}次 -->

            <p>哈哈哈哈,我是app中的内容!</p>
        </div>

        <script>
            // 组件是用来创建组件实例的(vm)
            // 创建一个按钮,可以显示按钮的点击的次数

            const Root = {
                data() {
                    return {
                        count: 0 // 记录点击次数
                    }
                }

                // template:
                //     "<button @click='count++'>点我一下</button> - 点了{{count}}次"
                
            }

            Vue.createApp(Root).mount("#app")
        </script>
    </body>
</html>

小结

  1. data中的数据会自动和使用它的视图绑定,数据发生变化视图会自动刷新

  2. template是模板,它决定了组件最终的样子
    定义模板的方式有三种
    1.在组件中通过template属性去指定
    2.直接在网页的根元素中指定
    3.组件中通过render()直接渲染(一般不用,用这个就回到了命令式编程)

  3. 如果直接将模板定义到网页中,此时模板必须符合html的规范(不建议定义到网页
    My-Button -> my-button

  4. 如果在组件中定义template,则会优先使用template作为模板,
    同时根元素中的所有内容,都会被替换
    如果在组件中没有定义template,则会使用根元素的innerHTML作为模板使用

05 使用构建工具

正常不会用上面的写法,麻烦,使用构建工具 Vite

  1. 手动配置,安装

    yarn init -y
    yarn add vite -D
    yarn add vue

使用yarn有问题,用的npm

  1. 新建文件 index.html 和 src/indx.js

  2. 编写代码

注意:引入js,要写type="module"

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script type="module" src="./src/index.js"></script>
</head>
<body>
  <div id="app"></div>
</body>
</html>

src/index.js

// 引入vue
// 这里引入的vue,默认不支持通过template属性来设置模板
import { createApp } from "vue"

// 创建一个根组件
const App = {
    data() {
        return {
            message: "我爱Vue!"
        }
    },

    template: "<h1>{{message}}</h1>"
}

// 创建应用挂载到页面
createApp(App).mount("#app")

  1. 纯手写脚手架(一般不这样干,现在是看逻辑)

    package.json(在原始代码基础上加)

    "script": {
        "dev": "vite --open",
        "build": "vite build",
        "preview": "vite preview"
    }
    
  2. 运行

    npm dev

    运行有问题,这里使用的 npm run dev
    运行成功
    在这里插入图片描述

  3. 修改引入的vue

    上面引入的vue,默认不支持通过template属性来设置模板,修改为:

    import { createApp } from 'vue/dist/vue.esm-bundler.js'

  4. 此时页面就可以显示

    上面的流程要会,之后再使用脚手架

07 Vue组件化

按照上面的编写代码的流程先写初步的代码

注意:

mount()的返回值就是根组件的实例

按照之前代码写是有问题的

只有一个js文件,没有模块化管理

  1. 我们把index.js作为入口文件(主程序)只做一件事:创建实例并挂载
  2. 我们把里面的根组件拿出来 App.js 默认导出
    // 创建根组件
    export default {
        data() {
            return {
                msg: "waiVue"
            }
        },
    
        template: `<h2>{{msg}}</h2>`
    }
    
  3. index.js里面引入
    import App from './App'

此时index.js就是主文件,App.js就是根组件,这样,一个文件一个组件,更加模块化清晰

引例:我要使用4个按钮,每个按钮count++,如果重新设置button然后点击事件(上面练习写到过),四个按钮的数字都会同步增加

组件化

封装一个自定义按钮组件 子组件 MyButton.js

export default {
  data() {
    return {
      count: 0
    }
  },

  template: `
  <div>
    <h2>子组件</h2>
    <button @click="count++">点我一下</button>
    <span>{{count}}</span>
  </div>
  `
}

使用子组件

  1. 根组件App.js里面引入
    import MyButton from "./MyButton"
  2. 根组件中注册子组件(下面的写法可以简写)
    components: { MyButton: MyButton },
  3. 根组件template里面使用子组件(这里面想用几个button就写一个,他们之前不会影响)
    <MyButton></MyButton>

当我们页面想使用那个子组件直接引入即可,想在哪里使用在哪里使用

在这里插入图片描述

注意

  1. 根组件中注册子组件,第一个MyButton是我们想叫的名字可以写别的,第二个MyButton是我们引入来的名字,即属性名:属性值,相同时可简写

  2. 在根组件写的<MyButton></MyButton>放在index.html里面写不好使,我去App.js里面改成小写my-button: MyButton就可以用了(但是:开发的时候不要这样写!!!)

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

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

相关文章

Quartus 实例应用(1)——EDA技术概述

EDA 技术概述 一、EDA技术及其发展二、Top-down 设计与 IP 核复用2.1 Top-down 设计2.2 Bottom-up 设计2.3 IP 复用技术与 SoC 三、数字设计的流程3.1 设计输入3.2 综合3.3 布局布线3.4 仿真3.5 编程配置 我们已经进入数字化和信息化的时代&#xff0c;其特点是各种数字产品的广…

UM2082F08三通道低频无线唤醒ASK接收芯片

UM2082F08 是基于单周期 8051 内核的超低功耗 8 位、 具有三通道低频无线唤醒 ASK 接收功能的 SOC 芯片。芯片可检测 30KHz~300KHz 范围的 LF&#xff08;低频&#xff09;载波频率数据并触发唤醒信号&#xff0c;同时可以调节接收灵敏度&#xff0c;确保在各种应用环境下实现可…

Python(request)爬虫有多强大

Python 的 requests 库是一个非常强大的网络爬虫工具&#xff0c;可以帮助开发人员快速&#xff0c;高效地从各种网站获取信息并处理数据。以下是 requests 库的一些强大功能&#xff1a; 1. 简单易用&#xff1a;requests 库的 API 设计合理&#xff0c;易于学习和使用。使用 …

“咸粽与甜粽”之争再启,五芳斋一季度亏损6393万

又是一年端午粽叶飘香&#xff0c;“咸粽与甜粽”之争再启。 4月29日&#xff0c;浙江五芳斋实业股份有限公司&#xff08;下称“五芳斋”&#xff0c;603237.SH)公布了2022年报及2023年一季报。 财报公布后的首个交易日&#xff08;5月4日&#xff09;&#xff0c;其股价下跌…

数据库监控与调优【二】—— 测试数据准备与数据操作工具

测试数据准备与数据操作工具 导入测试数据 使用MySQL官方测试数据库——employee-data 地址&#xff1a;https://dev.mysql.com/doc/index-other.html 下载项目&#xff0c;将项目传到服务器的/opt目录下 导入employees.sql语句 mysql -uroot -pImooc123456 < employe…

软考高级系统架构设计师(九) 作文模板-企业应用集成

目录 作文模板 例子-企业应用集成 摘要 项目相关背景及主要功能 你的岗位及主要职责 论文主体内容的总概 项目最终的实施效果或你的总结和感悟等 正文 项目背景介绍 相关问题回应 主体内容 论文结论 例子-类似方向- 作文模板 例子-企业应用集成 2021系统架构设计…

【App渗透】用BurpSuite抓包安卓手机app内容(详细)

文章目录 前言一、电脑端的配置二、BurpSuite的配置三、手机端的配置四、抓包总结 前言 很多情况下&#xff0c;在电脑的手机模拟器上面做app测试会存在大大小小的bug或者各种坑&#xff0c;而且有些模拟器很不方便&#xff0c;非常不好用。网上的教程虽然多&#xff0c;但是大…

【大数据之Hive】十六、Hive-HQL函数之窗口函数(开窗函数)

1 概述 先定义了窗口的大小&#xff08;按行来算&#xff09;&#xff0c;然后对窗口内的行的数据进行计算&#xff0c;再将计算结果返回给改行。   窗口函数包括窗口和函数两部分&#xff0c;窗口用于定义计算范围&#xff0c;函数用于定义计算逻辑&#xff0c;窗口函数只会…

React通过useContext特性实现组件数据传递

我们来说一个属性 useContext 这个确实用的挺少的 不过 还是简单做一下 打开我们的react项目 在src下创建一个文件夹 components 因为他是两个 甚至多个组件之间使用的 然后在components下创建两个组件 分别叫 dom.jsx dom1.jsx 命名命的比较不规范 不过本身只是做个案例 懒得做…

0-1背包

问题概述&#xff1a; 0-1背包是在n件物品取出若干件放在空间为V的背包里&#xff0c;每件物品的体积为v[ i ]&#xff0c;与之相对应的价值为w[ i ],要求在不超过背包空间的情况下&#xff0c;得到的物品的价值总和最大&#xff0c;问这个最大值是多少&#xff1f; 问题分析…

pod 知识点 下

上一篇分享了 pod 的基本知识点&#xff0c;有 K8S 环境的小伙伴还是可以用起来的&#xff0c;还对比较简单&#xff0c;知道了 pod 的 yaml 文件结构&#xff0c;标识&#xff0c;基本的创建 pod 和删除 pod 的用法等等&#xff0c;我们继续 pod 的基本分类 前面我们说到了 p…

什么是Natural Language Generation(NLG)?

文章目录 1.NLG的定义2.NLP的步骤3.NLG生成文本方式有哪些&#xff1f;3.1.简单的数据合并3.2.模板化的NLG3.3.高级NLG 4.NLG的应用有哪些&#xff1f; 1.NLG的定义 自然语言生成&#xff08;Natural Language Generation, NLG&#xff09;是NLP&#xff08;自然语言处理&…

Sikulix自动化工具的使用

1.Sikuli-x简介 Sikuli是识别和控制GUI组件进行UI自动化测试的技术&#xff0c;它是有MIT的研究人员开发进行设计的。Sikuli在墨西哥维乔印第安人(Huichol Indians)的语言里是上帝之眼的意思&#xff0c;Sikuli的工作模式与人眼一样&#xff0c;直接识别图像。 Sikuli-x是Sik…

1、Redis入门与安装配置

是什么&#xff1f; Remote Dictionary Server(远程字典服务) 是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库。提供了丰富的数据结构&#xff0c;例如String、Hash、List、Set、SortedSet等等。数据是存在内存中的&#xf…

python爬虫-逆向实例小记-2

注意&#xff01;&#xff01;&#xff01;&#xff01;某数据网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01;&#xff01; 案例分析 第一步&#xff1a;分析请求和响应内容。该网站任何一请求和内容都不可直接…

网站SEO优化的注意事项

SEO作为一种网络营销方式&#xff0c;高投入产出比是其优势所在。通过SEO优化为站点带来大量的主动搜索自然流量&#xff0c;对于企业主来说&#xff0c;是非常必要的。搜索引擎算法在不断发展&#xff0c;SEO技术也在不断发展。那么&#xff0c;如何能做好SEO呢&#xff1f;小…

投出去的简历无人问津,原因竟然在这……

近期收到了不少朋友的反馈说&#xff0c;失业半个月无人问津&#xff0c;放在前些年第二天开始面试有人找&#xff0c;或者是第二天入职了……&#xff0c;为啥明明不招人要挂着招人的岗位&#xff1f; 随着移动互联网的发展&#xff0c;Android市场的需求也在不断变化和升级。…

【springboot】—— 后端Springboot项目开发

后端Springboot项目开发 步骤1 先创建数据库&#xff0c;并在下面创建一个user表&#xff0c;插入数据&#xff0c;sql如下&#xff1a; CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT COMMENT ID,email varchar(255) NOT NULL COMMENT 邮箱,password varchar(255)…

Turf.js:用于地理空间分析的 JavaScript 库

https://turfjs.org/ 处理和分析地理空间数据在许多应用程序和平台中发挥着至关重要的作用。如地图绘制、路径规划、基于位置的服务和地理空间分析。Turf.js 是一个专门为执行地理空间操作而开发的开源 JavaScript 库。在本文中&#xff0c;我将详细探讨 Turf.js &#xff0c;…

Linux系统下列出库文件中的符号指令(nm)

文章目录 1 nm指令2 符号类型的含义3 简单示例 1 nm指令 nm是names的缩写&#xff0c; nm命令主要是用来列出某些文件中的符号&#xff08;说白了就是一些函数和全局变量等&#xff09;。 nm命令的输出包含三个部分&#xff1a; 1 符号值。默认显示十六进制&#xff0c;也可以…