loading...
Vue3.0从入门到精通
Published in:2022-01-31 | category: Vue知识整合
Words: 6k | Reading time: 30min | reading:

Vue3.0入门实战

1、Vue3开发环境准备

1.1 学习vue你需要的前置知识

  1. HTML的基础知识,你需要达到中级水平,写前端页面的结构代码完全没有问题。
  2. CSS的基础知识,最好做过半年以上的切图和布局,最好了解CSS3的知识。
  3. JavaScript的基础知识,对基础语法掌握。
  4. node.js初级知识,只需要会npm的使用和项目初始化就可以了。

下载Vue2.0的两个版本:

​ 官方网站:https://vuejs.org/

1.2 VSC 安装设置

  • 1、打开进入软件,如果发现是英文版本,不要急,首先按F1快捷键或者Ctrl+Shift+P,切入到命令行模式,输入“Configure Language”

  • 2、按回车键后进入设置界面

  • 3、只需要将上面的”EN”改为“zh-CN”即可,注意大小写

Visual Studio Code 有两个比较重要的文件,一个是 setting.json (基本设置),另一个是 keybindings.json(配置快捷键文件)。它们 分别在【文件】-【首选项】-【设置】和【文件】-【首选项】-【键盘快捷方式】。

  • 4、快捷键

    极常用的快捷键:

    ctrl + E 查找最近打开过的文件
    ctrl + tab 在文件之间切换
    ctrl + G 跳到指定行
    Ctrl + Shift + F 在项目下所有文件内查找内容(并且可全局替换)
    Ctrl + \ 或者 按住 Ctrl 双击文件。
    Ctrl + p 全局搜索文件
    Ctrl + Home / End 跳到文件头部或者尾部

1.3 Window 上安装Node.js

你可以采用以下方式来安装。

1、Windows 安装包(.msi)

目前Node.js的最新版本是12.13.x。首先,从Node.js官网下载对应平台的安装程序,网速慢的国内镜像

查看版本:

1
2
3
cmd>node -v

cmd>npm -v

1.4 live-server使用

  • 1、用npm进行全局安装
1
npm install live-server -g

因为npm需要访问外网,速度很缓慢,经常导致安装失败,建议先使用npm安装cnpm工具

  • 2、安装cnpm

​ 安装cnpm,输入以下命令:

1
2
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install live-server -g #国内镜像

###2、 Vue第一个案例

在Vue3.0中,每个Vue应用都是通过用createApp函数创建一个新的应用实例开始的,这种统一的应用方式。学习Vue3.0,就是对其生命周期的中函数,有的放矢,加加减减,或独立或联合。

生命周期图

siGrPs.png

Vue库的引入:

CDN方式:推荐用< script src=”http://unpkg.com/vue@next" >< /script>,就是引用CDN的方式。

传统方式:就是直接下载vue.global.js文件到本地,然后再要用Vue的HTML文件中引用就好了

先用第一个框图中的createApp和mount搞个样例,让代码先飞一会。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>myfirst vue app</title>
<style>
.hello_div {
border: 1px solid darkgreen;
border-radius: 15px;
width: 850px;
line-height: 50px;
text-align: center;
}
</style>
<script src="vue.min.js"></script>
</head>
<body>

<div id="hello" class="hello_div">
大家好,{{ msg }}
</div>

<script>
const vue = Vue.createApp({
data() {
return {
msg: "this is my first vue app"
}
}
})
vue.mount("#hello")
</script>
</body>
</html>

总结:应用Vue3.0,可按三步骤进行,

  1. 是定义将要赋予元素的数据。
  2. 是声明Vue实例。
  3. 是将数据和元素进行绑定。

定下这个基调之后,后面就是学习它的语法(模板、条件和组件等)和生命周期函数的应用了。

2、学习Vue常用的指令

2.1 数据绑定

数据绑定最常见的形式就是使用双大括号{ { } }的文本插值,如果你要用不常见的,那可用

< span v-text=””></ span>的方式。在Vue中,带有v-前缀的特殊属性,称为指令。

无论选择哪一个插值方式绑定到组件上(HTML标签上),在组件实例上的值发生了改变,插值处的内容都会更新,这便是数据驱动的方式。

2.1.1 文本插值
v-text指令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Vue3.0核心语法</title>
<script src="assets/js/vue.global.js"></script>
</head>
<body>
<div id="app">
<input id="name" v-model="msg" placeholder="输入文本内容"/>
<p>用双大括号实现文本插值:{{ msg }}</p>
<p>用v-text指定实现插值:<span v-text="msg"></span></p>

</div>

<script>

Vue.createApp({
data() {
return {
msg: ''
}
}
}).mount("#app")
</script>
</body>
</html>
v-html指令

在开发过程中,有时候会输出有格式的动态内容,比如输出带颜色文本。如果用插值的方式,输出的为文本内容,显然满足不了要求。这时就要用到v-html指令了。

温馨提醒:在生产环境中动态渲染HTML是非常危险的,因为容易导致XSS攻击。所以只能在可信的内容上使用v-html,永远不要在用户提交和可操作的网页上使用。

XSS攻击:通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Vue3.0核心语法</title>
<script src="../assets/js/vue.global.js"></script>
</head>
<body>
<div id="app">
<h2>v-text&v-html案例</h2>
<hr>
<div id="app">
<p v-text="message">hello</p>
<span v-html="msgHtml">abc
</span>
</div>
<script>
var app = Vue.createApp({
data(){
return {
message:'hello vue',
msgHtml:'<h2 >wellcome to <font color="red">vue </font>world!</h2>'
}
}
})
.mount("#app")
</script>
</body>
</html>
2.1.2 v-if指令
简单的v-if和v-else
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>v-if指令</title>
<script src="assets/js/vue.global.js"></script>
</head>
<body>
<h2>v-if指令和v-else指令的使用</h2>
<hr>
<div id="app">
<p>此时isLogin的值为:{{isLogin}}</p>
<span v-if="isLogin">你好,欢迎您</span>
<span v-else>请你先登录</span>
</div>

<script>
Vue.createApp({
data(){
return{
isLogin:false
}
}
}).mount("#app")
</script>
</body>
</html>
v-show指令

如果你要实现业务方面的条件判断,用v-if指令就可以了;如果只是想切换一下CSS的内容,那你可以用v-show指令。v-show只是简单地切换元素的CSS属性值,不支持v-else,也不支持< template>元素,它常用于隐藏或显示某个元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<script src="assets/js/vue.global.js"></script>
<title>v-if & v-show & v-else</title>
</head>
<style>
.show {
margin-top: 20px;
width: 600px;
height: 50px;
background: rgb(248, 244, 26);
}
</style>
<body>
<div id="app">
<input type="button" value="按下就点亮了" v-on:click="show()"> <br/>
<div class="show" v-show="report">点亮啦~~~</div>
</div>
<script>
Vue.createApp({
data() {
return {
report: false
}
},
methods: {
show() {
this.report = true;
}
}
}).mount("#app")
</script>
</body>
</html>
2.1.3 v-for指令

索引和值

数据列表在表格输出时,常常需要用到序号。v-for指令支持输出下标,将下标+1,即可获得序号。为了更接近 JavaScript 迭代器的语法,Vue3.0支持用of替代in作为分隔。

简单的v-for输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="assets/js/vue.global.js"></script>
<title>v-for指令</title>
</head>
<style>
.lang{
border: 1px solid darkcyan;
width: 600px;
height: 200px;
}
</style>
<body>
<h2>v-for案例</h2>
<hr>
<div class="lang">
<ul id="program">
<li v-for="item in items">
{{item}}
</li>
</ul>
</div>
<script>
Vue.createApp({
data(){
return{
items:[10,88,7,26,48,26,97,5]
}
}
}).mount("#program")
</script>
</body>
</html>

输出结果为:

siyLan.png

索引与值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>v-for 输出</title>
<script src="../assets/js/vue.global.js"></script>


</head>
<style>
.lang {
border: 1px solid darkcyan;
width: 600px;
height: 200px;
}
</style>
<body>
<h2> v-for案例</h2>
<div class="lang">
<ul id="program">
<li v-for="(item,i) in items">
{{i}}:{{ item }}
</li>
</ul>
</div>
<script>
Vue.createApp({
data() {
return {
items:[10,88,7,15,20,30,55,87]
}
}
}).mount("#program")
</script>
</body>
</html>
嵌套v-for

v、k、i 这几个字符可以自己定义,分别表示每次循环内容的值、键、序号。

  • v: 循环中每条数据的值 小鱼、20、如花
  • k: 循环中每天数据的键 username、age、girl
  • i: 循环的序号,从0开始
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<!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 src="assets/js/vue.global.js"></script>
</head>
<style>
.lang {
border: 1px solid darkcyan;
width: 600px;
height: 200px;
}
</style>
<body>
<h2>v-for案例 嵌套输出</h2>
<div class="lang">
<ur>
<li v-for="student in students">
<span v-for="(v,k,i) in student">
{{i+1}}---{{k}}---{{v}} <br/>
</span>
</li>
</ur>
</div>
<script>
Vue.createApp({
data(){
return{
students:[
{
name:'xiaoxiang',
age:20
},
{
name:'xiaoming',
age:23
}
]
}
}
}).mount(".lang")
</script>
</body>
</html>
v-for与-v-if混合

由于当v-if和v-for处于同一节点时,v-if的优先级比v-for更高,这意味着v-if将没有权限访问v-for里的变量,就是说不可以将v-if和v-for放在同一个元素里。

1
2
3
4
<!-- v-forv-if 和不可以放在同一个元素内 -->
<li v-for="item in items" v-if="item==true">
{{ good }}
</li>

为了解决v-for和v-if同一水平的问题,你可以把v-for移动到