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

Vue前端框架08 Vue框架简介、VueAPI风格、模板语法、事件处理、数组变化侦测

目录

    • 一、Vue框架
      • 1.1渐进式框架
      • 1.2 Vue的版本
    • 二、VueAPI的风格
    • 三、Vue开发准备工作
    • 四、模板语法
      • 文本插值
      • 属性绑定
      • 条件渲染
      • 列表渲染
      • key管理状态
    • 四、事件处理
      • 定义事件
      • 事件参数
      • 事件修饰符
    • 五、数组变化侦测

一、Vue框架

渐进式JavaScript框架,易学易用,性能出色,适用场景丰富的Web前端框架
功能是构建用户界面
基于标准的HTML、CSS和JavaScript,提供了一套声明式的、组件化的编程模型,帮助高效得开发用户界面

1.1渐进式框架

渐进式框架:Vue是一个框架也是一个生态,功能覆盖了大部分前端的常见需求,Vue的设计非常注重灵活性和可以被逐步集成的特点
不同方式使用Vue:
1、无需构建步骤,渐进式增强静态的HTML
2、在任何页面作为 Web components嵌入
3、单页应用(SPA)
4、全栈/服务端渲染(SSR)
5、jamstack/静态站点生成(SSG)
6、开发桌面端、移动端、WebGL,甚至是命令行终端中的界面

1.2 Vue的版本

Vue的版本:开发中Vue可以选择两大版本,Vue2和Vue3,老项目一般Vue2,新项目一般选择Vue3
Vue3涵盖了Vue2的知识体系,当然Vue3增加了很多新的特性

官方文档:cn.vuejs.org

二、VueAPI的风格

主要两种风格:选项式API(Vue2)和组合式API(Vue3)
不同底层提供的两个接口,基础概念和知识是通用的
当生产项目中:
不需要使用构建工具或者在低复杂度的场景中用Vue的时候,推荐用选项式API
当打算用Vue构建完整的单页应用,推荐采用组合式API+单文件组件

三、Vue开发准备工作

查看vue版本
node -v
创建Vue项目
npm init vue@latest
进入项目
cd vue-base
安装
npm install
运行项目
npm run dev

vite.config.js Vue配置文件
package.json 信息描述文件
index.thml 入口html文件
node_modules Vue项目运行的依赖文件
public 资源文件夹
README.md 注释文件

四、模板语法

Vue使用的是基于HTML的模板语法,可以以声明式的将组件实例绑定到DOM中,所有的VUE语法都是语法层面合法的HTML,可以被符合规范的浏览器和HTML解析器解释

文本插值

双大括号进行数据绑定文本插值
每个绑定支持单一表达式

<template><p>{{msg}}</p><p>{{hello}}</p><p>{{num+1+2+3}}</p><p>{{ok?'Yes':'No'}}</p><p>{{message.split("").reverse().join("")}}</p>
</template><script>
export default {data(){return{msg:"神奇的语法",hello:"hello world",num:10,ok:'Yes',message:"大家好呀"}}
}
</script>

属性绑定

双大括号不能在HTML attribute中使用 想要响应式绑定一个attribute,应该使用v-bind指令

<template>
<!--  用v-bind 调整属性 同时可以用:简写   undefined 那么就是消除对应的属性-->
<div v-bind:class="dynamicClass" v-bind:id="dynamicId" :title="dynamicTittle">{{msg}}111</div>
<!--  一次性绑定多个-->
<div v-bind="objectOfAttrs"></div>
</template><script>
export default {name: "HelloWorld",data(){return{msg:"hello world",dynamicClass:"active",dynamicId:"APPID",dynamicTittle:undefined,objectOfAttrs:{class:"appclass",id:"appid"}}}
}
</script>

条件渲染

<template><h3>条件渲染</h3><div v-if="flag">看得见吗?</div><div v-else-if="!flag">还是看看吧</div>
<!--  v-show 和 v-if 一样的但是v-if是真实的按条件渲染 切换的时候对监听器和组件销毁与重建 false不会做任何事 true才会去渲染v-show简单 无论条件如何都会渲染 只不过改变的是display的属性v-if 强调的是切换开销 v-show 强调初始渲染开销频繁切换用v-show  运行时捆绑条件少用v-if
--><div v-show="flag">看得见吗?</div>
</template><script>
export default {data(){return{flag:false}}
}
</script><style scoped></style>

列表渲染

<template><h3>列表渲染</h3><p v-for="item in names" v-bind:key="item">{{item}}</p>
<!--  index 是默认的下标--><p v-for="(item,index) in names" v-bind:key="(item,index)">{{item}}-{{index}}</p>
<!--  v-for 不仅仅可以遍历数组 也可以遍历对象--><div v-for="item in result" v-bind:key="item"><p>{{item.title}}</p><img :src="item.url" :alt="item.id"></div><div v-for="item in result" v-bind:key="item"><div v-for="(value,key,index) in item" v-bind:key="(value,key,index)"><p>{{value}}-{{key}}-{{index}}</p></div></div><div v-for="(value,key,index) in user" v-bind:key="(value,key,index)"><p>{{value}}-{{key}}-{{index}}</p></div>
</template><script>
export default {name: "ForDemo",data(){return{names:["a","b","c"],result:[{"id":101,"title":"标题1","url":"https://www.baidu.com/img/PC_wenxin_1142bc061306e094e6eddaa3d9656145.gif"},{"id":102,"title":"标题2","url":"https://www.baidu.com/img/PC_wenxin_1142bc061306e094e6eddaa3d9656145.gif"},{"id":103,"title":"标题3","url":"https://www.baidu.com/img/PC_wenxin_1142bc061306e094e6eddaa3d9656145.gif"}],user:{name:"kewin",age:18}}}
}
</script>

key管理状态

Vue默认按照就地更新策略渲染元素列表
当顺序改变 vue不会移动dom元素的顺序,而是就地更新,确保原本指定的索引位置上渲染
为了给vue一个提示,方便跟踪每个节点的标识,从而重用和重新排序现有的元素,需要一个key唯一标志属性

四、事件处理

可以使用v-on指令(简写@)监听DOM事件,并且在事件触发的时候执行对应的JavaScript
用法:οnclick=“methodname”或@click=“handler”
事件处理器的值可以是内联事件处理器也可以是方法事件处理器

定义事件

<template><button @click="count++">AddInline</button><button @click="addCount">AddMethod</button><p>{{count}}</p>
</template><script>
export default {name: "ListenerDemo",data(){return{count:1}},//所有方法函数都放在这里methods:{addCount(){this.count++console.log(this.count)}}
}
</script>

事件参数

事件参数可以获取event对象和通过事件传递参数
vue中event对象就是js的event对象

  methods:{addCount(e){this.count++console.log(e.target.innerHTML="Add"+this.count)}
<template><button @click="count++">AddInline</button><button @click="addCount('hello')">AddMethod</button><p>{{count}}</p><p @click="getNameHanlder(item)" v-for="(item,index) in names" :key="index">{{item}}</p>
</template><script>
export default {name: "ListenerDemo",data(){return{count:1,names:["张三","李四","王五"]}},//所有方法函数都放在这里methods:{addCount(msg){this.count++event.target.innerHTML="add"+msg},getNameHanlder(item){console.log(item)}}
}
</script>
<template><button @click="count++">AddInline</button><!-- 可以用&event 传event事件参数 --><button @click="addCount('hello',$event)">AddMethod</button><p>{{count}}</p><p @click="getNameHanlder(item)" v-for="(item,index) in names" :key="index">{{item}}</p>
</template><script>
export default {name: "ListenerDemo",data(){return{count:1,names:["张三","李四","王五"]}},//所有方法函数都放在这里methods:{addCount(msg,e){this.count++e.target.innerHTML="add"+msg},getNameHanlder(item){console.log(item)}}
}
</script>

事件修饰符

<template><h3>事件修饰符</h3>
<!--  进行修饰 实现点击但是不跳转--><a @click.prevent="clickHandle" href="http://www.baidu.com">点击进入连接</a><div @click="clickDiv">
<!--    让事件不冒泡到父元素--><p @click.stop="clickP">测试冒泡</p></div>
</template><script>
export default {name: "ListenerDemo2",methods:{clickHandle(){console.log("被点击了")},clickDiv(){console.log("DIV")},clickP(){console.log("P")}}
}
</script><style scoped></style>

五、数组变化侦测

<template><h3>数组变化侦听</h3><ul><li v-for="(item,index) of names" :key="index"> {{item}}</li></ul>
<!--  Vue可以侦听响应式数组的变更方法 并且在调用的时候触发相关的更新push()  添加pop()   取出最上面的一个shift()unshift()splice()sort()reverse() 逆置
--><button @click="addListHandle1">reverse</button>
<!--使用替换数组的方法来更新filter()concat()slice()直接对原数组进行变更
--><button @click="addListHandle2">itemupdate</button>
</template><script>
export default {name: "ArrayListenerDemo",data(){return{names:["张三","李四","王五"]}},methods:{addListHandle1(){this.names.reverse()},addListHandle2(){//直接this.names.concat(["123"])不会引起UI更新this.names=this.names.concat(["123"])}}
}
</script>

相关文章:

Vue前端框架08 Vue框架简介、VueAPI风格、模板语法、事件处理、数组变化侦测

目录 一、Vue框架1.1渐进式框架1.2 Vue的版本 二、VueAPI的风格三、Vue开发准备工作四、模板语法文本插值属性绑定条件渲染列表渲染key管理状态 四、事件处理定义事件事件参数事件修饰符 五、数组变化侦测 一、Vue框架 渐进式JavaScript框架&#xff0c;易学易用&#xff0c;性…...

WebStorm使用PlantUML

虽然 WebStorm 没有官方的 PlantUML 插件&#xff0c;但我们可以使用第三方插件 PlantUML Integration 来实现在 WebStorm 中使用 PlantUML。 以下是使用 PlantUML Integration 插件&#xff0c;在 WebStorm 中设计一个 Vue 模块的步骤&#xff1a; 安装 PlantUML Integratio…...

Python做批处理,给安卓设备安装应用和传输图片

场景&#xff1a;几台新安卓平板过来了&#xff0c;需要安4个应用并复制4张图片。手工操作其实也未尝不可&#xff0c;但是能自动化起来&#xff0c;岂不是美哉。 python调用系统命令&#xff0c;我选用了os.system&#xff0c;最简单粗暴&#xff0c;也能有回显&#xff0c;就…...

如何获取springboot中所有的bean

代码 Component public class TestS {Autowiredprivate Map<String, Object> allBean Maps.newConcurrentMap();public void testA(){System.out.println("测试下");}}这段代码是一个使用 Spring Framework 的依赖注入&#xff08;DI&#xff09;功能的示例。…...

大数据技术之Hadoop:HDFS存储原理篇(五)

目录 一、原理介绍 1.1 Block块 1.2 副本机制 二、fsck命令 2.1 设置默认副本数量 2.2 临时设置文件副本大小 2.3 fsck命令检查文件的副本数 2.4 block块大小的配置 三、NameNode元数据 3.1 NameNode作用 3.2 edits文件 3.3 FSImage文件 3.4 元素据合并控制参数 …...

用C语言实现牛顿摆控制台动画

题目 用C语言实现牛顿摆动画&#xff0c;模拟小球的运动&#xff0c;如图所示 拆解 通过控制台API定位输出小球运动的只是2边小球&#xff0c;中间小球不运动&#xff0c;只需要固定位置输出左边小球上升下降时&#xff0c;X、Y轴增量一致。右边小球上升下降时&#xff0c;X、…...

如何自己开发一个前端监控SDK

最近在负责团队前端监控系统搭建的任务。因为我们公司有统一的日志存储平台、日志清洗平台和基于 Grafana 搭建的可视化看板&#xff0c;就剩日志的采集和上报需要自己实现了&#xff0c;所以决定封装一个前端监控 SDK 来完成日志的采集和上报。 架构设计 因为想着以后有机会…...

node.js笔记

首先&#xff1a;浏览器能执行 JS 代码&#xff0c;依靠的是内核中的 V8 引擎&#xff08;C 程序&#xff09; 其次&#xff1a;Node.js 是基于 Chrome V8 引擎进行封装&#xff08;运行环境&#xff09; 区别&#xff1a;都支持 ECMAScript 标准语法&#xff0c;Node.js 有独立…...

mysql 增量备份与恢复使用详解

目录 一、前言 二、数据备份策略 2.1 全备 2.2 增量备份 2.3 差异备份 三、mysql 增量备份概述 3.1 增量备份实现原理 3.1.1 基于日志的增量备份 3.1.2 基于时间戳的增量备份 3.2 增量备份常用实现方式 3.2.1 基于mysqldump增量备份 3.2.2 基于第三方备份工具进行增…...

9月5日上课内容 第一章 NoSQL之Redis配置与优化

本章结构 关系型数据库和非关系型数据库 概念介绍 ●关系型数据库&#xff1a; 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。 SQL 语句&#xff08;标准数据查询语言&#xff09;就是…...

QT 第四天

一、设置一个闹钟 .pro QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend…...

nrf52832 GPIO输入输出设置

LED_GPIO #define LED_START 17 #define LED_0 17 #define LED_1 18 #define LED_2 19 #define LED_3 20 #define LED_STOP 20设置位输出模式&#xff1a; nrf_gpio_cfg_output(LED_0); 输出高电平:nrf_gpio_pin_set(LED_0); 输…...

MyBatis 动态 SQL 实践教程

一、MyBatis动态 sql 是什么 动态 SQL 是 MyBatis 的强大特性之一。在 JDBC 或其它类似的框架中&#xff0c;开发人员通常需要手动拼接 SQL 语句。根据不同的条件拼接 SQL 语句是一件极其痛苦的工作。例如&#xff0c;拼接时要确保添加了必要的空格&#xff0c;还要注意去掉列…...

CSS 斜条纹进度条

效果&#xff1a; 代码&#xff1a; html: <div class"active-line flex"><!-- lineWidth&#xff1a;灰色背景 --><div class"bg-line"><div v-for"n in 30" class"gray"></div></div><div…...

JavaScript(1)每天10个小知识点

​ 目录 1. JavaScript 有哪些数据类型&#xff0c;它们的区别&#xff1f;**2. 数据类型检测的方式有哪些**3. null 和 undefined 区别**4. intanceof 操作符的实现原理及实现**5. 如何获取安全的 undefined 值&#xff1f;**6. Object.is() 与比较操作符 “”、“” 的区别*…...

scanf和scanf_s函数详解

目录 引言&#xff1a; 1.scanf函数的用法&#xff1a; 2.scanf_s函数的用法&#xff1a; 3.scanf和scanf_s的区别&#xff1a; 结论&#xff1a; 引言&#xff1a; 在C语言中&#xff0c;输入函数scanf是非常常用的函数之一&#xff0c;它可以从标准输入流中读取数据并将其…...

基于SSM的在线购物系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

认识JVM的内存模型

从上一节了解到整个JVM大的内存区域&#xff0c;分为线程共享的heap&#xff08;堆&#xff09;&#xff0c;MethodArea&#xff08;方法区&#xff09;&#xff0c;和线程独享的 The pc Register&#xff08;程序计数器&#xff09;、Java Virtual Machine Stacks&#xff08;…...

Java8实战-总结19

Java8实战-总结19 使用流映射对流中每一个元素应用函数流的扁平化 使用流 映射 一个非常常见的数据处理套路就是从某些对象中选择信息。比如在SQL里&#xff0c;你可以从表中选择一列。Stream API也通过map和flatMap方法提供了类似的工具。 对流中每一个元素应用函数 流支持…...

论文浅尝 | 训练语言模型遵循人类反馈的指令

笔记整理&#xff1a;吴亦珂&#xff0c;东南大学硕士&#xff0c;研究方向为大语言模型、知识图谱 链接&#xff1a;https://arxiv.org/abs/2203.02155 1. 动机 大型语言模型&#xff08;large language model, LLM&#xff09;可以根据提示完成各种自然语言处理任务。然而&am…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...