Vue - 入门

news/2024/7/7 22:36:17/文章来源:https://www.cnblogs.com/xw-01/p/18267663

零:前端目前形势

前端的发展史

  1. HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端渲染完数据 -> 返回数据给前端 -> 在浏览器中查看

  2. Ajax的出现 -> 后台发送异步请求,Render+Ajax混合

  3. 单用Ajax(加载数据,DOM渲染页面):前后端分离的雏形

  4. Angular框架的出现(1个JS框架):出现了“前端工程化”的概念(前端也是1个工程、1个项目)

  5. React、Vue框架:当下最火的2个前端框架(Vue:国人喜欢用,React:外国人喜欢用)

  6. 移动开发(Android+IOS) + Web(Web+微信小程序+支付宝小程序) + 桌面开发(Windows桌面):前端 -> 大前端

  7. 一套代码在各个平台运行(大前端):谷歌Flutter(Dart语言:和Java很像)可以运行在IOS、Android、PC端

  8. 在Vue框架的基础性上 uni-app:一套编码 编到10个平台

  9. 在不久的将来 ,前端框架可能会一统天下

详细的发展史:
https://zhuanlan.zhihu.com/p/337276087?utm_source=wechat_session&utm_medium=social&utm_oi=41967790587904

一:Vue介绍 和 基本使用

1.Vue介绍

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架

与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用

Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合

渐进式框架

可以一点一点地使用它,只用一部分,也可以整个工程都使用它

网站

  • 官网:https://cn.vuejs.org/

  • 文档:https://cn.vuejs.org/v2/guide/

2.Vue特点

易用

通过 HTML、CSS、JavaScript构建应用

灵活

不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸缩。

高效

  • 20kB min+gzip 运行大小
  • 超快虚拟 DOM
  • 最省心的优化

3.M-V-VM思想

① MVVM介绍

MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,是一种事件驱动编程方式

  • Model :vue对象的data属性里面的数据,这里的数据要显示到页面中
  • View :vue中数据要显示的HTML页面,在vue中,也称之为“视图模板” (HTML+CSS)
  • ViewModel:vue中编写代码时的vm对象,它是vue.js的核心,负责连接 View 和 Model数据的中转,保证视图和数据的一致性,所以前面代码中,data里面的数据被显示中p标签中就是vm对象自动完成的(双向数据绑定:JS中变量变了,HTML中数据也跟着改变)
    image

② MVVM的特性

  • 低耦合视图(View)可以独立于Model变化和修改,1个ViewModel可以绑定到不同的View上,当View变化的时候 Model可以不变,当Model变化的时候 View也可以不变
  • 可复用:可以把一些视图逻辑放在1个ViewModel中,让很多View重用这端视图的逻辑(以此减少代码冗余)
  • 独立开发开发人员可以专注于业务逻辑数据的开发(ViewModel),设计人员可以专注于页面设计
  • 可测试:界面元素是比较难以测试的,而现在的测试可以针对ViewModel来编写

③ MVVM的逻辑

image

4.组件化开发、单页面开发

组件化开发

类似于DTL中的include每一个组件的内容都可以被替换和复用
image

单页面开发

只需要1个页面,结合组件化开发来替换页面中的内容

页面的切换只是组件的替换,页面还是只有1个index.html

5.版本

1.X:使用得较少

2.X:普遍使用

3.X:刚出没多久,只有Beta版

6.引入方式

① CDN的方式引入

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

② 下载后导入

其实就是直接在浏览器中打开https://cdn.jsdelivr.net/npm/vue/dist/vue.js, 然后复制下来,创建一个js文件再粘贴进去

<script src="js/vue.js"></script>

7.补充

解释型的语言是需要解释器的

js就是一门解释型语言,只不过js解释器被集成到了浏览器中

所以,在浏览器的Console中输入命令,就和在cmd中输入python后,进入交互式环境一样

nodejs:一门后端语言

把chrome的v8引擎(解释器),安装到操作系统之上

8.简单使用

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>vue的简单使用</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box">{ {name} }
</div>
</body>
<script>let vm = new Vue({el: '#box', // 在box这个div中可以写 vue的语法data: {name: 'Hello World'}})
</script>
</html>

双向数据绑定测试

vm._data.name='darker'    // 修改js中变量的值
$('#box').text('hahah')    // 修改HTML的div中的值

image

二:模板语法

1.插值语法

语法:{ { 变量、js语法、三目表达式 } }

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>插值</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box"><ul><li>字符串:{ {name} }</li><li>数值:{ {age} }</li><li>数组:{ {list1} }</li><li>对象:{ {obj1} }</li><li>字符串:{ {link1} }</li><li>运算:{ {10+20+30+40} }</li><li>三目运算符:{ {10>20?'是':'否'} }</li></ul>
</div>
</body>
<script>let vm = new Vue({el: '#box', // 在box这个div中可以写 vue的语法data: {name: 'Darker', // 字符串age: 18, // 数值list1: [1,2,3,4],   // 数组obj1: {name: 'Darker', age: 19}, // 对象link1: '<a href="https://www.baidu.com">百度一下 你就知道</a>'}})
</script>
</html>

image

三:指令

1.文本指令

指令 释义
v-html 让HTML渲染成页面
v-text 标签内容显示js变量对应的值
v-show 放1个布尔值:为真 标签就显示;为假 标签就不显示
v-if 放1个布尔值:为真 标签就显示;为假 标签就不显示

v-show 与 v-if 的区别:

  • v-show:标签还在,只是不显示了(display: none)
  • v-if:直接操作DOM,删除/插入 标签

v-html:让HTML渲染成页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>v-html</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box"><ul><li v-html="link1"></li></ul>
</div>
</body>
<script>let vm = new Vue({el: '#box', // 在box这个div中可以写 vue的语法data: {link1: '<a href="https://www.baidu.com">百度一下 你就知道</a>'}})
</script>
</html>

image

v-text:标签内容显示js变量对应的值

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>v-text</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box"><ul><li v-text="link1"></li></ul>
</div>
</body>
<script>let vm = new Vue({el: '#box', // 在box这个div中可以写 vue的语法data: {link1: '<a href="https://www.baidu.com">百度一下 你就知道</a>',}})
</script>
</html>

image

v-show:显示/隐藏内容

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>v-show</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box"><h3>案例:控件通过按钮来控制显示和小事</h3><button @click="handleClick()">点我</button><br><div v-show="isShow">isShow</div>
</div>
</body>
<script>let vm = new Vue({el: '#box',data: {isShow: true,},methods: {handleClick(){this.isShow = !this.isShow    // this指的是当前的vue对象},}})
</script>
</html>

image

v-if:显示/删除内容

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>v-if</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box"><h3>案例:控件通过按钮来控制显示和消失</h3><button @click="handleClick()">点我</button><br><div v-if="isCreated">isCreated</div>
</div>
</body>
<script>let vm = new Vue({el: '#box',data: {isCreated:true},methods: {handleClick(){this.isCreated = !this.isCreated    // this指的是当前的vue对象},}})
</script>
</html>

image

2.事件指令

指令 释义
v-on 触发事件(不推荐)
@ 触发事件(推荐)
@event 触发event事件(可以是其他任意事件)

v-on:click可以缩写成@click

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>事件指令</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box"><button v-on:click="handleClick1">点我1</button><!-- 下面这个用的多 --><button @click="handleClick2">点我2</button><!-- 如果不传参数,是没有区别的 --><button @click="handleClick3()">点我3-1(带括号)</button><!-- 如果要传参数 --><button @click="handleClick3(1,22,333)">点我3-2(带括号+参数)</button><!-- 传入事件 --><button @click="handleClick4($event)">点我4(带事件参数)</button>
</div>
</body>
<script>let vm = new Vue({el: '#box',data: {},methods: {handleClick1() {console.log('点我1')},handleClick2() {console.log('点我2')},handleClick3(a,b,c) {console.log(a,b,c)},handleClick4(event) {console.log(event)},}})
</script>
</html>

image

3.属性指令

指令 释义
v-bind 直接写js的变量或语法(不推荐)
: 直接写js的变量或语法(推荐)

v-bind:class='js变量'可以缩写成:class='js变量'

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>属性指令</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script><style>.red {color: rgba(255, 104, 104, 0.7);}.purple {color: rgba(104, 104, 255, 0.7);}</style>
</head>
<body>
<div id="box"><img v-bind:src="url" alt="" height="100"><br><button @click="handleClick">点我变色</button><div :class="isActive?'red':'purple'"><h1>我是一个div</h1></div>
</div>
</body>
<script>let vm = new Vue({el: '#box',data: {url: 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=205441424,1768829584&fm=26&gp=0.jpg',change: 'red',isActive: true},methods: {handleClick() {this.isActive = !this.isActive},}})
</script>
</html>

image

四:Style 和 Class

数据的绑定

语法:

:属性名='js变量/js语法'

  • :class='js变量、字符串、js数组'
    class:三目运算符、数组、对象

  • :style='js变量、字符串、js数组'
    style:三目运算符、数组[{backgreound: ‘red’},]、对象

      <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Style 和 Class</title><script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script><style>.red {color: rgba(255, 104, 104, 0.7);}.font-20 {font-size: 20px;}.be-bold {font-weight: bold;}</style></head><body><div id="box"><p>我是一个普通的p标签</p><div :class="class_obj"><p>我是一个不普通的p标签1</p></div><button @click="handleClick">点击放大字体</button><div :style="style_obj"><p>我是一个不普通的p标签2</p></div></div></body><script>let vm = new Vue({el: '#box',data: {// class_obj: 'red',    // 放1个是字符串class_obj: ['red', 'font-20', 'be-bold'],    // 放2个是数组// class_obj: { red:true, be-bold:false},    // 也可以放对象// 数组.push()   从尾部添加1个元素// 数组.pop()    删除最后1个元素 并返回// 对象的写法style_obj: {color: 'red',fontSize: '20px'}// style_obj: [{background:'red'}, {fontSize:'20px'}]},methods: {handleClick(){this.style_obj['fontSize']='30px'}}})</script></html>
    

下方试验的命令

vm.class_obj.pop()
vm.class_obj.pop()
vm.class_obj.pop()
vm.class_obj.push('be-bold')
vm.class_obj.push('red')
vm.class_obj.push('font-20')

image


image

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(线段树,最小值不能低于0的)北京建筑大学2024年程序设计竞赛 A 寿命修改

题意:code: #pragma GCC optimize("O3") #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> using namespace std; using i64 = long long; using u64 = unsigned long long; using PII = …

PTA第三阶段作业总结

前言 第三阶段的两次大作业明显对设计的要求进一步提高了。我两次作业一共得到了162分,最后一次作业只得到了62分,第7次作业得到了满分,但程序仍有许多不足,下面开始逐题分析。 7-1 家居强电电路模拟程序-3 这道题是一个全新的模拟场景,模拟一个家居电路。主要的类就是一个…

Django 笔记 - Django Shell

启动 Django Shell 交互式界面,具体命令如下:python manage.py shell具体实例 实例 1. 直接修改用户密码,无需原密码。 在 Django Shell 交互式界面下,修改 admin 用户密码的具体代码如下:from django.contrib.auth.models import User user = User.objects.get(username=…

用pipenv解决pyinstaller打包文件过大的问题

学会用pyinstaller打包python文件后,我发现直接大暴出来的文件内存特别大 于是我上网搜了一些压缩方法,试过用upx,用了之后感觉有点麻烦,后面又看到了pipenv,感觉还不错 首先用windows+r快捷键输入cmd打开命令管理器安装pipenv模块pip install pipenv -i https://pypi.tun…

对7~8次pta的总结

(1).前言: 第七次pta难度很大,主要体现在互斥开关的设计上: 互斥开关: 互斥开关有3个引脚:1个是汇总引脚,另两个是分支引脚。 开关电路示意图如图1所示,左边是汇总引脚,编号为1;右边两个是分支引脚,右上的输出引脚为2,右下输出引脚为3。图中1、2、3引脚均可以是输入引脚…

rust的webview框架tauri快速搭建

因为上一步把rust相关环境都搭建好了,可以用h5开发桌面程序了,搭建tauri npm create tauri-app@latest,等待安装npm run tauri dev,运行测试环境了,直接用网页查看页面效果 npm run tauri build,等待打包出exe文件,在目录tauri-app\src-tauri\target\release下运行exe查…

数据分析神器Pandas快速入门3类型转换

序列类型转换3.1 自动转换 在pandas 1.0 中,引入了一种新的转换方法.convert_dtypes。它会尝试将Series 换为支持 pd.NA 类型。以city_mpg 系列为例,它将把类型从int64转换为Int64: >>> city_mpg.convert_dtypes() 0 19 1 9 2 23 3 1…

log 日志原理

1)slf4j接口 仅仅定义了接口,因此,需要绑定到具体的日志框架才可以打印日志出来,具体如何来做呢,引用一张slf4j官网上的图片: 具体的组合使用: slf4j-api,日志是打到了/dev/null里面,因此啥也打印不出来slf4j-api + logback-classic:使用的是logback,因为logback本身…

tp5(finish)

tp5 1.tp5.0开始 结构 www WEB部署目录(或者子目录) ├─application 应用目录 │ ├─common 公共模块目录(可以更改) │ ├─module_name 模块目录(Home:前台模块;Admin:后台模块) │ │ ├─config.php 模块配置文件 │ │…

thinkphp3.2.x漏洞分析

tp3.2.3 1.开始 入口文件 就是www/index.php,index.php包含了框架的入口文件,所以访问后可以直接加载thinkphp框架 配置文件 thinkphp的配置文件在www/ThinkPHP/Conf/convention.php url大小写 url默认是大小写敏感的,也可以通过修改convertion.php,达到url不区分大小写的目…

git基本知识

文件在本地仓库的状态常用命令:git status 查询状态git add 添加到暂存区,可以使用通配符*git commit desc:1 提交到本地仓库,只能提交暂存区的文件,该次提交的描述git commit -a -m desc:2 表示直接提交,不用放到暂存区git log 查看提交记录git reset --soft 123456 传入…

揭秘Python:对象类型打印

哈喽,大家好,我是木头左!一、Python数据类型简介 在Python的世界中,了解你正在处理的数据类型是至关重要的。Python提供了多种内置数据类型,包括数字(整数和浮点数)、字符串、列表、元组、字典等。这些数据类型决定了你可以对数据执行哪些操作,以及如何高效地存储和处理…

用Python的pynput和pyautogui实现自动化操作

哈喽,大家好,我是木头左!一、前言 在日常生活和工作中,常常需要重复执行一些机械性的操作,如复制粘贴、点击按钮等。这些操作虽然简单,但频繁执行会浪费大量时间。为了提高效率,可以使用Python编写脚本来实现这些操作的自动化。本文将介绍如何使用pynput库记录各种按键操…

(log求因数和)北京建筑大学2024年程序设计竞赛 B因数之和

题意:计算一个数的所有因数的和通常涉及质因数分解,然后对每个质因数的幂次进行求和运算。 具体步骤如下: 1.质因数分解:首先,将给定的数进行质因数分解,表示为\(2^{a}*3^{b}*5^{c}....\) 2.计算每个质因数的贡献:对于每个质因数p(如2, 3, 5等),计算从p{0}到p的所有…

样本空间的计数

高一初学阶段常用的样本空间的计数方法需要切实掌握前言 在统计样本空间数时,需要考虑是否有顺序和是否放回,同时请注意列举法、描述法,表格法,树状图的合理运用。这些方法都是高一初次学习需要切实掌握的方法,等到了高二或者高三,对思维的要求提高以后,更多的会用到加法…

空间单细胞|基于图像的数据分析(3)

引言 在这篇指南[1]中,我们介绍了Seurat的一个新扩展功能,用以分析新型的空间解析数据,将重点引言 在这篇指南中,我们介绍了Seurat的一个新扩展功能,用以分析新型的空间解析数据,将重点介绍由不同成像技术生成的三个公开数据集。Vizgen MERSCOPE(用于小鼠大脑研究) Nan…

关于Java中 因取消装箱可能产生 NullPointerException 的原因

一.什么是装箱,什么是拆箱? 装箱:将值类型转换为引用数据类型。 拆箱:将引用数据类型转换为值类型。说白了就是 Integer与int数据类型之间的转换 二.为什么会有自动一说呢? 我们都知道,java是一个面向对象的语言。因此包括数字、字符、日期、布尔值等等再内的一切都是对象…

7-8次大作业总结

前言 这两次对我这种水平的学生来说很难写,只能搭建大致的框架和思路。 还是要对对第七和第八次大作业里所学进行一个总结,从多方面来分析这两次作业之间的联系和差异,并从中了解自己的不足与缺点。第七次作业添加了互斥开关和窗帘,窗帘还好,只是一个简单的电路的受控设备…

第三轮OOP作业总结

随着这一次大作业的结束,这学期的PTA大作业也随之完结,可以说这最后一次大作业也是最难的一次,在这一次作业中我也感受到了不良代码结构所导致的修改错误的痛苦,接下来让我们对这两次题目进行相应分析。家居强电电路模拟程序-3 家居强电电路模拟程序-4第三次作业 这一次大作…

Windows 7操作系统全面解析与实用技巧

深入介绍Windows 7操作系统的基础知识、功能特性、分类和基本操作技巧,包括核心功能、特征、分类、安装方法、启动、文件管理、个性化设置等方面。旨在帮助用户深入理解Windows 7,并掌握提高工作效率和个性化设置的实用技巧。Win7操作系统一、操作系统的概述 1.1操作系统的概…