当前位置: 首页 > article >正文

Vue3入门介绍及快速上手

vue3

文章目录

      • vue3
        • 1、概况
        • 2、快速入门
        • 3、常用指令
          • 3.1、v-for
          • 3.2、v-bind
          • 3.3、 v-if & v-show
          • 3.4、v-model
          • 3.5、 v-on
        • 4 生命周期
        • 5、 工程化
          • 5.1、环境准备
          • 5.2、Vue项目-创建
          • 5.3、Vue项目开发流程
          • 5.4、组合式API
          • 5.5、reactive和ref函数
          • 5.6、watch
          • 5.7、父子组件通信
        • 6、Vue路由

1、概况

Vue 3是一款用于构建用户界面的渐进式JavaScript框架,同时也是一个强大的生态系统。(官方网站:https://cn.vuejs.org/)

Vue 3生态系统

  • 框架定义:Vue 3提供了一套完整的项目解决方案,用于快速构建现代化的Web应用。
  • 主要优势:显著提升前端项目的开发效率和可维护性。
  • 学习曲线:需要理解和掌握框架的使用规则(详情请参考官方文档)。
2、快速入门

准备

  1. 引入Vue模块(官方提供)
  2. 创建Vue程序的应用实例,控制视图的元素
  3. 准备原色(div),被Vue控制

数据驱动视图

  1. 准备数据

  2. 通过插值表达式渲染页面

    插值表达式:

    • 形式:{{ 表达式 }}。
    • 内容可以是:
      • 变量
      • 三元运算符
      • 函数调用
      • 算术运算

    实例代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <div id = "app">
            <h1>{{message}}</h1>
        </div>
        <script type = "module">
            import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
            createApp({
                data(){
                    return{
                        message: "hello Vue"
                    }
                }
            }).mount("#app");
        </script>
    </body>
    </html>
    
3、常用指令

指令:HTML标签上带有 v-前缀的特殊属性,不同的指令具有不同的含义,可以实现不同的功能。

常用指令:

指令作用
v-for列表渲染,遍历容器的元素或者对象的属性
v-bind为HTML标签绑定属性值,如设置 href , css样式等
v-if/v-else-if/v-else条件性的渲染某元素,判定为true时渲染,否则不渲染
v-show根据条件展示某元素,区别在于切换的是display属性的值
v-model在表单元素上创建双向数据绑定
v-on为HTML标签绑定事件
3.1、v-for
  • 作用:列表渲染,遍历容器的元素或者对象的属性

  • 语法: v-for = “(item,index) in items”

    • 参数说明:

      • tems 为遍历的数组

      • item 为遍历出来的元素

      • index 为索引/下标,从0开始 ;可以省略,省略index语法: v-for = “item in items”

    • 书写形式:

      <p v-for="content in contents"> {{content}}</p>
      

      可能是下面的效果,包含了多条数据展示

      image-20231016113019953

      遍历的数组,必须在data中定义; 要想让哪个标签循环展示多次,就在哪个标签上使用 v-for 指令。

v-for的key

  • 作用:给元素添加的唯一标识,便于vue进行列表项的正确排序复用

  • 语法: v-for = “(item,index) in items” :key=“唯一值”

  • 注意点:

    • key的值只能是字符串 或 数字类型
    • key的值必须具有唯一性
    • 推荐使用id作为key(唯一),不推荐使用index作为key(会变化,不对应)
  • 写法:

    <p v-for="content in contents" :key="content.id"> {{content}}</p>
    

    效果如下:

    image-20231016113256208

    官方推荐在使用 v-for 时提供一个key属性,以遍可以追踪每个节点,提升渲染性能。

3.2、v-bind
  • 作用:动态为HTML标签绑定属性值,如设置href,src,style样式等。

  • 语法:v-bind:属性名=“属性值”

  • 简化::属性名=“属性值”

  • html标签写法

image-20231016113549193

  • v-bind写法

    image-20231016113842660

v-bind所绑定的数据,必须在data中定义

3.3、 v-if & v-show
  • 作用:这两类指令,都是用来控制元素的显示与隐藏的

  • v-if

    • 语法:v-if=“表达式”,表达式值为 true,显示;false,隐藏

    • 原理:基于条件判断,来控制创建或移除元素节点(条件渲染)

    • 场景:要么显示,要么不显示,不频繁切换的场景

    • 其它:可以配合 v-else-if / v-else 进行链式调用条件判断

    • 注意:v-else-if必须出现在v-if之后,可以出现多个; v-else 必须出现在v-if/v-else-if之后

    • 示例代码:

      <td v-if="user.gender == 1"></td>
      <td v-else-if="user.gender == 2"></td>
      <td v-else>其他</td>
      
  • v-show

    • 语法:v-show=“表达式”,表达式值为 true,显示;false,隐藏

    • 原理:基于CSS样式display来控制显示与隐藏

    • 场景:频繁切换显示隐藏的场景

    • 示例代码:

      不展示谢逊这条数据

      <tr v-for="(user,index) in userList" v-show="user.name != '谢逊'">
      
3.4、v-model

需求:用户列表数据渲染,获取用户输入的条件

搜索栏中当用户点击查询按钮时,需要获取到用户输入的表单数据,并输出出来 。

image-20231016114248641

需要想要实现上面这个功能,就需要使用新的指令,v-model

v-model

  • 作用:在表单元素上使用,双向数据绑定。可以方便的 获取 或 设置 表单项数据

  • 语法:v-model=“变量名”

    image-20231016114359403

    v-model 中绑定的变量,必须在data中定义。

3.5、 v-on
  • 作用:为html标签绑定事件(添加时间监听)

  • 语法:

    • v-on:事件名=“内联语句”

    • v-on:事件名="函数名“

    • 简写为 @事件名=“…”

      示例1:

      <div id="app">
        <input type="button" value="点我一下试试" 
      	v-on:click="console.log('试试就试试');">
      </div>
      

      示例2:

      <div id="app">
         <input type="button" value="点我一下试试" v-on:click="handle">
         <input type="button" value="再点我一下试试" @click="handle">
      </div>
      
         const app = createApp({
            data() {
              return {
                name: "Vue"
              }
            },
            methods: {
              handle() {
                console.log('试试就试试');
              }
            },
          }).mount("#app");
      
4 生命周期

生命周期:指一个对象从创建到销毁的整个过程。

image-20231016154655474

生命周期的八个阶段:每触发一个生命周期事件,会自动执行一个生命周期方法(钩子)。

状态阶段周期
beforeCreate创建前
created创建后
beforeMount载入前
mounted挂载完成
beforeUpdate数据更新前
updated数据更新后
beforeUnmount组件销毁前
unmounted组件销毁后

image-20231016154746993

5、 工程化

我们目前的前端开发中,当我们需要使用一些资源时,例如:vue.js,和axios.js文件,都是直接再工程中导入的,如下图所示:

image-20231016165503931

但是上述开发模式存在如下问题:

  • 不规范:每次开发都是从零开始,比较麻烦
  • 难复用:多个页面中的组件共用性不好
  • 难维护:js、图片等资源没有规范化的存储目录,没有统一的标准,不方便维护

所以现在企业开发中更加讲究前端工程化方式的开发,主要包括如下4个特点

  • 模块化:将js和css等,做成一个个可复用模块
  • 组件化:我们将UI组件,css样式,js行为封装成一个个的组件,便于管理
  • 规范化:我们提供一套标准的规范的目录接口和编码规范,所有开发人员遵循这套规范
  • 自动化:项目的构建,测试,部署全部都是自动完成

所以对于前端工程化,说白了,就是在企业级的前端项目开发中,把前端开发所需要的工具、技术、流程、经验进行规范化和标准化。从而提升开发效率,降低开发难度等等。接下来我们就需要学习vue的官方提供的脚手架帮我们完成前端的工程化。

5.1、环境准备
  • 介绍:create-vue是Vue官方提供的最新的脚手架工具,用于快速生成一个工程化的Vue项目。

  • create-vue提供了如下功能:

    • 统一的目录结构
    • 本地调试
    • 热部署
    • 单元测试
    • 集成打包上线
  • 依赖环境:NodeJS

    image-20231016170430866

    详细安装方式,请查看资料中的NodeJS安装文档

  • npm:Node Package Manager,是NodeJS的软件包管理器。

    image-20231016171048831

5.2、Vue项目-创建
  • 创建一个工程化的Vue项目,执行命令:npm init vue@latest

    image-20231016171109816

    详细步骤说明:

    image-20231016171137402

    执行上述指令,将会安装并执行 create-vue,它是 Vue 官方的项目脚手架工具

    项目创建完成以后,进入项目目录,执行命令安装当前项目的依赖:npm install

    image-20231016171243338

    创建项目以及安装依赖的过程,都是需要联网的。

  • Vue项目-目录结构

    image-20231016171341396

  • 启动项目,执行命令:npm run dev

    image-20231016171434286

  • 浏览器中可以直接访问,地址:http://127.0.0.1:5173

image-20231016171545313

5.3、Vue项目开发流程

如下图:

image-20231016171734451

其中*.vue是Vue项目中的组件文件,在Vue项目中也称为单文件组件(SFC,Single-File Components)。Vue 的单文件组件会将一个组件的逻辑 (JS),模板 (HTML) 和样式 (CSS) 封装在同一个文件里(*.vue

image-20231016171923272

5.4、组合式API

组合式API是Vue 3中的一种新的编程模式,它提供了更灵活和可组合的方式来编写Vue组件逻辑,使得代码更加清晰、可维护,并且使得组件的复用更加容易。

官网地址:https://cn.vuejs.org/api/

image-20231017160800675

Vue3中提供了很多的组合式API,当然我们平时开发中使用不了那么多,我们重点讲解几个后面项目常用的API,分别是:

  • reactive、ref、watch、defineProps、defineEmits
5.5、reactive和ref函数

reactive:能将对象类型变为【响应式】,对基本类型无效(例如 string,number,boolean)

<script setup>
// 导入
import { reactive } from 'vue'
// 执行函数 传入参数 变量接收
const state = reactive({
 msg:'this is msg'
})
const setSate = ()=>{
 // 修改数据更新视图
 state.msg = 'this is new msg'
}
</script>

<template>
{{ state.msg }}
<button @click="setState">change msg</button>
</template>

ref:接收简单类型或者对象类型的数据传入并返回一个响应式的对象

<script setup>
 // 导入
 import { ref } from 'vue'
 // 执行函数 传入参数 变量接收
 const count = ref(0)
 const setCount = ()=>{
   // 修改数据更新视图必须加上.value
   count.value++
 }
</script>

<template>
  <button @click="setCount">{{count}}</button>
</template>

修改数据更新视图必须加上.value

二者对比:

  1. 都是用来生成响应式数据

  2. 不同点

    1. reactive不能处理简单类型的数据
    2. ref参数类型支持更好,但是必须通过.value做访问修改
    3. ref函数内部的实现依赖于reactive函数
  3. 在实际工作中的推荐

    1. 推荐使用ref函数,减少记忆负担
5.6、watch

侦听一个或者多个数据的变化,数据变化时执行回调函数

案例代码:

<script setup>
  //导入
  import { ref ,watch} from 'vue'

  const count = ref(0)

  const setCount = () => {
    count.value++
  }

  //侦听单个属性的变化
  watch(count,(newVal,oldVal) => { 
    console.log(`count的值为: newVal: ${newVal},oldVal: ${oldVal }`)
  })

  const user = ref({
    name:"张三"
  })

  const setUser = () =>{
    user.value.name = "李四"
  }

  //侦听对象的单个属性
  watch(()=>user.value.name,(newVal,oldVal) => { 
    console.log(`count的值为: newVal: ${newVal},oldVal: ${oldVal }`)
  })

</script>

<template>
  <button @click="setCount">{{ count }}</button>
  <button @click="setUser">{{ user.name }}</button>
</template>
5.7、父子组件通信

我们来看下面这个图,有三个组件,组件A的子组件分为是B和C,其中B和C是兄弟关系。我们这次重点研究是父子组件的通信,如果想要实现B和C的通信,需要使用第三方组件pinia才行(不是课程重点)

image-20231017165028773

父组件传递信息到子组件:

  • 父组件中给子组件绑定属性
  • 子组件内部通过props选项接收数据

子组件传递信息到父组价

  • 父组件中给子组件标签通过@绑定事件
  • 子组件内部通过 emit 方法触发事件

案例:

父组件

<script setup>
  //导入
  import { ref ,watch} from 'vue'

  //引入子组件
  import SonCom from '@/components/son-com.vue'

  //定义属性
  const money = ref(100);

  //父组件增加金额
  const incMoney = () =>{
    money.value += 10;
  }

  //子组件减少金额
  const decMoney = (val) =>{
    money.value -= val;
  }

</script>

<template>
  <h3>
    <button @click="incMoney">增加金额</button>
  </h3>
  <SonCom 
  :money = "money"
  @decMoney="decMoney"
  ></SonCom>
 
</template>

子组件:son-com.vue

<script setup>

//接收父组件传递过来的属性
const props = defineProps({
    money :Number
})

//声明父组件传递过来的方法
const emit = defineEmits(['decMoney'])

//调用父组件的方法
const buy = () =>{
    emit('decMoney',20)
}

</script>

<template>
    <div class="son">
        我是子组件 - {{ money }}
        <button @click="buy">减少金额</button>
    </div>
</template>

<style scoped>

.son{
    border: 1px solid #000;
    padding: 80px;
}
</style>
6、Vue路由

组成

  • Router实例:路由实例,基于createRouter函数创建,维护了应用的路由信息。

  • <router-link>:路由链接组件,浏览器会解析成<a>

  • <router-view>:动态视图组件,用来渲染展示与路由路径对应的组件。

    image-20231016173010980

安装vue-router(创建vue项目已选择)

  • 安装命令:npm install vue-router@4

  • 定义路由

    image-20231016173240645


http://www.kler.cn/a/393753.html

相关文章:

  • 大数据新视界 -- 大数据大厂之 Impala 存储格式转换:从原理到实践,开启大数据性能优化星际之旅(下)(20/30)
  • Node.js笔记
  • Autosar CP 基于CAN的时间同步规范导读
  • 图像处理实验二(Image Understanding and Basic Processing)
  • 28.医院管理系统(基于springboot和vue)
  • 金价大跌,特朗普胜选或成导火索
  • Autosar CP 基于CAN的时间同步规范导读
  • DA217应用笔记
  • TypeScript在现代前端开发中的应用
  • C哈的刷题计划之输出数字螺旋矩阵(1)
  • LabVIEW环境监测系统
  • HDFS新增节点和删除datanode节点
  • 打造专业问答社区:Windows部署Apache Answer结合cpolar实现公网访问
  • Java后端请求想接收多个对象入参的数据方法
  • 数据仓库面试题集离线实时
  • 双 11 数据可视化:Pyecharts 与 Matplotlib 绘制商品价格对比及动态饼图
  • 企业一站式管理系统odoo的研究——系统搭建
  • BigDecimal为什么比int要好
  • 计算机网络(11)和流量控制补充
  • linux c/c++最高效的计时方法
  • Oracle 19c PDB克隆后出现Warning: PDB altered with errors受限模式处理
  • 花了36元给我的个人博客上了一道防御
  • 单元测试、集成测试、系统测试、验收测试、压力测试、性能测试、安全性测试、兼容性测试、回归测试(超详细的分类介绍及教学)
  • 【操作系统】守护进程
  • 多模态大模型(2)--BLIP
  • 基于springboot的物品回收系统