惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
小众软件
小众软件
The Last Watchdog
The Last Watchdog
Latest news
Latest news
P
Palo Alto Networks Blog
C
Cisco Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
L
Lohrmann on Cybersecurity
P
Privacy International News Feed
NISL@THU
NISL@THU
T
Threat Research - Cisco Blogs
T
Threatpost
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
Spread Privacy
Spread Privacy
T
Tor Project blog
Cyberwarzone
Cyberwarzone
C
Cybersecurity and Infrastructure Security Agency CISA
AWS News Blog
AWS News Blog
S
Securelist
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
Hugging Face - Blog
Hugging Face - Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
CERT Recently Published Vulnerability Notes
V
Visual Studio Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
博客园 - 司徒正美
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
罗磊的独立博客
A
Arctic Wolf
腾讯CDC
WordPress大学
WordPress大学
IT之家
IT之家
Last Week in AI
Last Week in AI
博客园 - 聂微东
P
Proofpoint News Feed
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
Hacker News: Ask HN
Hacker News: Ask HN
Help Net Security
Help Net Security
Blog — PlanetScale
Blog — PlanetScale
爱范儿
爱范儿
美团技术团队
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Tailwind CSS Blog

披萨盒的赛博日志

谈谈工作了半年的感受 使用策略模式重构复杂业务分支 像 systemd 一样管理 MacOS 后台常驻任务 以ORM看封装的边界 Git Merge VS Git Rebase: 如何优雅地合并分支? 修改Linux内核模块以支持WG OpenLDAP折腾日记 非特权模式容器 ssh 登录问题 在 Linux 开发环境中使用网络代理 白嫖 Aseprite 像素绘图软件 MongoDB 增删改查 Python数据分析工具包-Numpy 解决 CLion 中文乱码问题 搭建 RLCraft 服务器 SpringBoot读取配置文件 Centos 配置 LNMP 环境 部署项目时遇到的坑 浅谈 xhr 请求跨域问题 JavaScript 学习笔记 Eclipse配置Web开发环境 Ribbon 简单使用 Nacos 简单使用 Spring Cloud Alibaba 环境搭建 什么是RSS?什么是Feed?它们有什么关系? Docker基本使用 TensorFlow启用GPU加速 如何进行内网穿透 Hello World! Git基本使用 Butterfly常用标签外挂
Vue2 基本知识
披萨盒 · 2022-08-29 · via 披萨盒的赛博日志

Vue是什么

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。


引入

使用 CDN:

1
2
3
4
5
开发版本:
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>

生产版本:
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14"></script>

下载并自行引入:

1
2
https://cdn.jsdelivr.net/npm/vue@next/dist/
https://unpkg.com/browse/vue@3.2.31/dist/

第一个Vue应用

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
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Hello Vue</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>

<div id="app">
<h1>{{message}}</h1>
</div>

<script>
const vm = new Vue({
el: "#app",
data: {
message: "Hello"
}
});

</script>

</body>
</html>

常用指令

插值表达式

1
2
{{name}}
{{school.name}}

通过插值表达式可以直接在页面中使用变量的值


v-html

向标签中插入一段html代码

1
2
3
4
5
6
7
8
9
10
11
12
<div id="app">
<div v-html="strong"></div>
</div>

<script>
const vm = new Vue({
el: '#app',
data: {
strong: '<b>strong</b>'
}
})
</script>

v-text

向标签中插入一段纯文本

1
2
3
<span v-text="message"></span>

<span>{{message}}</span>

v-for

循环指令,用于遍历数组等,在遍历数组时还可以加上index获取下标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div id="app">
<h1 v-for="(item, index) in items">
{{item.name}} ===> {{index}}
</h1>
</div>

<script>
var vm = new Vue({
el: "#app",
data: {
items: [
{name: "Pillage"},
{name: "Daisy"},
{name: "Steven"}
]
}
});
</script>

v-if

条件语句,可以结合使用 v-else v-else-if,值为布尔类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<div id="app">
<h1 v-if="flag">Yes</h1>
<h1 v-else>No</h1>

===================================

<h1 v-if="tag == 'A'">A</h1>
<h1 v-else-if="tag == 'B'">B</h1>
<h1 v-else-if="tag == 'C'">C</h1>
<h1 v-else>D</h1>

</div>

<script>
var vm = new Vue({
el: "#app",
data: {
flag: true,

tag: "A"
}
});

</script>

v-show

根据判断条件来决定是否展示该标签

1
2
3
4
5
6
7
8
9
10
11
12
13
<div id="app">
<div v-show="show"><h1>展示</h1></div>
<div v-show="notShow">未展示</div>
</div>
<script>
const vm = new Vue({
el: '#app',
data: {
show: true,
notShow: false
}
})
</script>

v-bind

为属性绑定一个值或变量

1
2
3
4
5
6
7
8
9
10
11
<div id="app">
<a v-bind:href="hao123">hao123</a>
</div>
<script>
const vm = new Vue({
el: '#app',
data: {
hao123: 'https://www.hao123.com/'
}
})
</script>

此指令具有简写形式(v-bind: 可以简写为 :)

1
<a v-bind:href="hao123">hao123</a>      =>      <a :href="hao123">hao123</a>

v-on

为标签绑定事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div id="app">
<button v-on:click="click">Click Me</button>
</div>

<script>
var vm = new Vue({
el: "#app",
data: {
message: "pillage"
},
methods: {
click: function() {
alert(this.message)
}
}
});

</script>

修饰符 (modifier) 是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。例如,.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault()

1
<form v-on:submit.prevent="onSubmit">...</form>

此指令也具有简写形式(v-on: 可以简写为 @)

1
2
<button v-on:click="click">Click Me</button>   =>   
<button @click="click">Click Me</button>

v-model

v-model可以实现对数据的双向绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div id="app">
输入一段文字:
<input type="text" v-model="message">
<br><br><br>
您输入的文字为:{{message}}
</div>

<script>
const vm = new Vue({
el: "#app",
data: {
message: ""
}
});

</script>

v-once

仅加载一次数据,以后数据即使改变也不会影响

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div id="app">
<p>姓名为:<span v-once>{{name}}</span></p>
<button @click="changeName">修改姓名</button>
</div>
<script>
const vm = new Vue({
el: '#app',
data: {
name: 'pillage'
},
methods: {
changeName() {
this.name = '小白'
}
}
})
</script>

v-cloak

当 Vue 实例编译结束,页面渲染后,此属性会立刻消失

作用:可以用来解决网速慢时页面出现一堆 的情况

基本使用:

1
2
3
4
5
6
7
8
9
10
11
<style>
[v-cloak] {
display: none;
}
</style>

<body>
<div id="app" v-cloak>
{{info.name}}
</div>
</body>

计算属性和侦听器

计算属性

计算属性使用了缓存机制,所以它执行的效率要比 methods 方法要高

计算属性也有两种写法:

  1. 类似于函数的简写形式
1
2
3
4
5
6
7
8
9
10
11
12
13
<div id="app">
{{date}}
</div>
<script>
const vm = new Vue({
el: '#app',
computed: {
date() {
return Date.now()
}
}
})
</script>

这样写默认只有getter方法,没有setter方法


  1. 对象形式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<div id="app">
{{name}}
</div>
<script>
const vm = new Vue({
el: '#app',
data: {
currentName: 'pillage'
},
computed: {
name: {
get() {
return this.currentName
},
set(newValue) {
this.currentName = newValue
}
}
}
})
</script>

此时运行 vm.name = '小白' 时,setter 会被自动调用,currentName 的值被更新

侦听器

虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。

他也有两种写法(简写形式和对象形式)

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
<div id="app">
<p v-text="university"></p>
<p>{{person}}</p>
</div>

<script>
const vm = new Vue({
el: "#app",
data: {
university: "东北林业大学",
person: {
name: "pillage",
age: 19
}
},

watch: {

university(newValue, oldValue) {
console.log("newValue:" + newValue + " oldValue:" + oldValue)
},

person: {

deep: true,

handler(obj) {
console.log("name:" + obj.name + " age:" + obj.age)
}
}
},
});
</script>

基本使用:收集表单数据

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
<div id="app">

<form action="">
账号:<input type="text" v-model="account"> <br><br>
密码:<input type="password" v-model="password"> <br><br>
性别:
<input type="radio" name="sex" value="boy" v-model="sex">
<input type="radio" name="sex" value="girl" v-model="sex"> <br><br>
爱好:
敲代码<input type="checkbox" value="code" name="hobby" v-model="hobby">
吃包子<input type="checkbox" value="eat" name="hobby" v-model="hobby">
刷视频<input type="checkbox" value="video" name="hobby" v-model="hobby"> <br><br>
所在省份:
<select name="province" v-model="province">
<option value="">请选择</option>
<option value="henan">河南</option>
<option value="tianjin">天津</option>
<option value="beijing">北京</option>
<option value="chongqing">重庆</option>
</select> <br><br>
其他信息:
<textarea v-model="other"></textarea> <br><br>
<input type="checkbox" v-model="accept">我已阅读并接受<a href="">《隐私声明》</a> <br><br>
<button>提交</button>

</form>

</div>

<script>
const vm = new Vue({
el: "#app",
data: {
account: '',
password: '',
sex: '',
hobby: [],
province: '',
other: '',
accept: false,
}
})

</script>

生命周期钩子

如下图:

img

(图片来源于网络)

其中 mounted 最常用,常用于发送 ajax 请求获取数据