什么是Vue? 怎么开始?

百度百科

Vue是一个流行的JavaScript框架, 用于构建用户界面,具有轻量级、 易学易用等特点,可以帮助开发人员快速、 高效地构建现代化的Web应用程序。
是目前最流行的前端框架 Vue作者尤雨溪

安装 创建 vue3

首先先安装16版本以上的node.js

使用CMD测试是否安装成功

1
2
3
输入: node -V
出现: v18.15.0 或者其他版本号则安装成功
切换淘宝镜像源: npm config set registry https://registry.npm.taobao.org

创建项目(组件式)

创建项目文件夹使用cmd进入至项目文件夹
cmd中显示为

1
2
3
4
5
Microsoft Windows [版本 10.0.22000.194]
(c) Microsoft Corporation。保留所有权利。

D:\Vue_Demo\你的项目文件夹名称>

在cmd中输入安装Vue项目脚手架

1
npm init vue@latest

然后会出现 使用 键选择,enter确认

1
2
3
4
5
6
7
8
✔ Add TypeScript--是否添加TypeScript支持。选择No。
✔ Add JSX Support--是否添加JSX支持。选择No。
✔ Add Vue Router for Single Page Application development--是否集成Vue路由。选择No。
✔ Add Pinia for state management--是否使用Pinia进行状态管理。选择No。
✔ Add Vitest for Unit testing--是否使用Vitest进行单元测试。选择No。
✔ Add an End-to-End Testing Solution--是否集成端到端测试。选择No。
✔ Add ESLint for code quality--是否集成ESLint进行代码质量检测。选择No。
✔ Add Prettier for code formatting--是否集成Prettier进行代码格式化。选择No。

然后可以通过 VScodeVSCode(全称:Visual Studio Code)是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全(又称 IntelliSense)、代码重构、查看定义功能,并且内置了命令行工具和 Git 版本控制系统。用户可以更改主题和键盘快捷方式实现个性化设置,也可以通过内置的扩展程序商店安装扩展以拓展软件功能。 打开文件夹或者继续使用cmd

1
cd 你的项目文件夹

拉取组件

1
2
npm install
等待下载完毕

启动

1
npm run dev

开始第一个Vue项目

打开App.vue文件 修改内容

1
2
3
4
5
6
<template>
</template>
<script>
export default{
}
</script>

<template>标签中编写html代码 在<script>标签里写JS代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<template>
<div>
<h1>{{ title }}</h1>
<p>{{ content }}</p>
</div>
</template>

<script>
export default {
name: 'test',
data() {
return {
title: 'Hello, Vue!',
content: '我所创建的第一个 Vue组件',
};
},
};
</script>

我们定义了一个名为 test 的 Vue 组件,
并在 data 中定义了两个变量 titlecontent 并且绑定到了组件模板的 <h1><p>元素上,并使用了插值表达式 {{ }} 来显示数据内容


Vue语法模板

插值表达式

插值表达式是 Vue 模板语法的一种基本特性,它可以将 JavaScript 表达式嵌入到模板中,并在后续的渲染过程中替换成实际的结果显示给用户。
例如:

1
2
3
4
5
<div>{{ message }}</div>

<script>
var message = "Hello Vue";
</script>

上面的{{message}}就是一个插值表达式 Vue 在渲染模板时会自动计算该表达式并将其结果展示在该

元素中。
插值表达式可以包含任意合法的 JavaScript 表达式 如:

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
<template>
<div>
<!--数组-->
{{ arr[1] }}
</div>
<div>
<!--方法-->
{{ hello() }}
</div>
<div>
<!--对象-->
{{ test.name }}
</div>
<!--这是js方法调用 -->
<div>当前秒数为:{{ second }}</div>
<!--表达式 -->
<div>{{1+1+1+11+1+1}}</div>
</template>

<script>
export default {
data() {
return {
second: 0, // 初始秒数为0
//数组
arr: ['啊对对对', '这是数组'],
//方法
hello() {
return "这是方法";
},
//对象
test: {
name: '这是对象',
age: 99999,
}
};
},created() {
setInterval(() => {
this.second += 1; // 每个1秒秒数加1
}, 1000);
}
};
</script>

指令

Vue 指令是 Vue 模板语法的另一种基本特性,它们可以扩展模板语言的能力,并且在组件中执行一些逻辑操作。指令使用 v- 前缀来表示

  1. v-if:根据表达式的真假值来有条件地渲染一个元素。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<template>
<div v-if="show">这个元素只会在 show 为真时显示
<button v-on:click="show=false">点击翻转值</button>
</div>
</template>

<script>
export default {
data() {
return {
show: false // 初始化为 false
};
},
mounted() {
this.show = true; // 在组件挂载后将 show 改成 true,此时元素才会呈现出来
}
};
</script>
  1. v-for:基于 Vue 实例中的数据循环渲染一组元素。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<template>
<ul>
<li v-for="item in test" :key="item">{{ item }}</li>
</ul>
</template>

<script>
export default {
data() {
return {
test: ["test1", "test2", "test3"]
};
}
};
</script>

上述代码中,使用 v-for 遍历了一个字符串数组,并将每个数组元素渲染到了一个 li 元素中。

  1. v-model:通常用于表单元素,用于在表单元素(文本框、单选框、多选框等)和 Vue 实例之间双向绑定数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<template>
<div>
<input type="text" v-model="message" />
<p>您输入的内容是:{{ message }}</p>
</div>
</template>

<script>
export default {
data() {
return {
message: "" // 初始化为一个空字符串
};
}
};
</script>

上述代码中,使用 v-model 使得表单元素和 Vue 实例绑定到一起,在文本框中输入内容时,Vue 实例中的数据也会跟着变化。

4. v-bind:用于将数据绑定到 HTML 的属性上。

1
2
3
4
5
6
7
8
9
10
11
12
13
<template>
<img v-bind:src="imgUrl" alt="我的图片是外部图床 可能被浏览器拦截图片外链 打开控制台看看图片连接有没有填充上来就ok" />
</template>

<script>
export default {
data() {
return {
imgUrl: "https://s2.loli.net/2022/10/18/soq82lvxakjeHB1.jpg" // 图片地址
};
}
};
</script>

上面的代码中,使用 v-bind 将组件实例中的数据绑定到了 img 标签的 src 属性上

5. v-on:用于监听 DOM 事件,在触发事件时自动执行对应的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
<template>
<button v-on:click="testClick">点击按钮</button>
</template>

<script>
export default {
methods: {
testClick() {
alert("您点击了按钮");
}
}
};
</script>
1
2
3
<button v-on:click="testClick">按钮</button>
等价于
<button onclick="testClick()">按钮</button>

上面的代码中,使用 v-on 监听了 button 元素的 click 事件,并在点击按钮时自动调用了相应的 testClick 方法进行处理。

过滤器


Vue响应式

reactive

在 Vue 3 中,可以通过 reactive() 方法创建一个响应式数据对象。
使用方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
import { reactive } from 'vue';

export default {
setup() {
const state = reactive({
count: 0
})

return {
state
}
}
}

在这里,我们定义了一个响应式数据对象 state,当 state.count 的值发生变化时,对其订阅的视图都会自动更新。
需要注意的是,不要直接修改 state 对象的属性值,改为使用 .value API 显示调用。例如,如果想要将 count 的值加1,应该使用 state.count.value++,而非 state.count++
同时,也可以使用 toRef() 将响应式对象中的某一项转化成 ref 类型:

1
2
3
4
5
const state = reactive({
name: 'John',
age: 28
});
const nameRef = toRef(state, 'name');

这样就能使用 nameRef.value 来读写 name 值,而任何对 name 的修改都会强制触发视图更新。
总的来说,reactive() 可以帮助我们实现“响应式”,即在数据变动时自动通知前端组件进行变更。

ref

当使用 ref 函数创建变量时,会返回一个包含 value 属性的对象,这个属性的值为传入 ref() 中的初始值。
我们可以直接访问 value 属性来获取和修改这个变量的值,而这些操作都是响应式的,即数据源中数据发生变化时,界面上对应的地方都自动更新。
例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { ref } from 'vue';

export default {
setup() {
const count = ref(0);

const handleClick = () => {
count.value++;
};

return {
count,
handleClick
}
}
}

在模板中可以直接绑定 count 变量:

1
2
3
4
5
6
<template>
<div>
<button @click="handleClick">Increment</button>
<p>Count: {{ count }}</p>
</div>
</template>

当点击按钮时,handleClick 函数中调用 count.value++count 进行了修改,这时模板中展示 {{ count }} 的地方会自动更新显示当前的计数器值。
需要注意的一点是,在 Vue 3 中,使用 ref 创建的基础类型数据是不可变的,如果要改变它们的值,必须通过修改它们的 value 属性来实现(如 count.value++)。同时,如果需要把 ref 作为 prop 传递给子组件,需要加上 .value:propName="refVariable.value"

1
2
3
4
5
const state = reactive({
foo: 'bar'
});

const fooRef = toRef(state, 'foo');

这样就将 state.foo 转化为了 fooRef.valuefooRef 对象在被修改时,也会触发相应的视图更新。


beforeCreatesetup 分别对应的是 Vue 2 和 Vue 3 中创建组件时执行的生命周期钩子函数。
在 Vue 2 中,我们可以使用 beforeCreate 钩子来在实例初始化之后、创建完数据响应式之前执行一些逻辑。

1
2
3
beforeCreate(){
console.log('beforeCreate');
}

而在 Vue 3 中,我们不再使用 beforeCreate 钩子,而是使用更加灵活和强大的 setup 函数。setup 函数用于代替 Vue 2.x 中的 beforeCreatecreated 两个钩子函数的功能,并且可以访问到组件实例上下文对象,返回一个用于渲染组件的 render 函数所需要的数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { reactive } from 'vue';

export default {
setup() {
console.log('setup');

const state = reactive({
message: 'Hello, World!'
});

return {
state
}
}
}

在这个示例中,我们使用 setup 函数创建了一个响应式状态对象,并将其作为返回值暴露出去,这样就可以在模板中直接使用了。
需要注意的是,在 Vue 3 中,你必须使用 setup 函数来创建组件,不能像 Vue 2 中一样直接使用选项对象导出组件(如 data()methods 等),否则会抛出错误。