为什么要学习Vue?

Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了。

这篇文章我们来讲一讲为什么要学习Vue
在这里插入图片描述
Vue是一个用于创建用户界面的开源JavaScript框架,也是一个创建单页应用的Web应用框架。 在GitHub上,该项目平均每天能收获95颗星,为Github有史以来星标数第3多的项目。

在过去的十年时间里,我们的网页变得更加动态化和强大了,这都要归功于JavaScript这门脚本语言。
在这里插入图片描述
现在的Web应用已经把很多传统的服务端代码放到了浏览器中,这样就产生了成千上万行的JavaScript代码,它们连接了各式各样的HTML和CSS代码。

在这里插入图片描述
但是简单的连接缺乏正规的组织形式,变得凌乱不堪,这也是为什么越来越多的前端开发者选择使用JavaScript框架,诸如Angular、React和Vue。
在这里插入图片描述
Vue是一款友好的、多用途且高性能的JavaScript框架,它能帮你创建可维护性和可测试性更强的代码库。
在这里插入图片描述

Vue是渐进式的JavaScript框架,也就是说,如果你已经有一个现成的应用,你可以将Vue作为该应用的一部分嵌入其中,带来更加丰富的交互体验。
在这里插入图片描述
或者如果你希望将更多业务逻辑放到前端来实现,那么Vue的核心组件及其生态系统也可以满足你的各式需求。
在这里插入图片描述
在这里插入图片描述

Vue和其它前端框架一样,允许你将一个网页分割成可复用的组件,每个组件都包含属于自己的HTML、CSS、JavaScript以用来渲染网页中相应的地方。

在这里插入图片描述


接下来我们就亲自动手感受一下Vue,构建一个商品库存的页面。

这不是教你怎么使用Vue,而是介绍一些核心概念,正是这些东西让Vue如此实用。

我们从网页中需要展示的数据开始,使用Vue的起步非常简单,首先我们引入Vue库:

<script src="https://unpkg.com/vue"></script>

创建一个Vue实例,通过应用的ID嵌入到我们的根元素中,将数据放入data对象中:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<h2>{{product}} are in stock.</h2>
		</div>

		<script src="https://unpkg.com/vue"></script>
		<script type="text/javascript">
			const app = new Vue({
				el: '#app', // el是元素(Element)的缩写
				data: {
					product: 'Boots',
				},
			})
		</script>
	</body>
</html>

这样你就可以看到,它已经工作起来了:
在这里插入图片描述
很酷,但是Vue的魔力在数据变更时才会出现。

打开控制台,改变product的值:

app.product = 'Socks';

注意在product的值改变的同时,Vue自动更新了我们的HTML:
在这里插入图片描述
这是因为Vue是响应式的,也就是说当我们的数据变更时,Vue会帮你更新所有网页中用到它的地方。

除了字符串,Vue对其它类型的数据也是如此。

我们把product改成一个商品数组,并将h2标签改成一个无序列表,使用Vue的v-for指令试试看:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<ul>
				<li v-for="product in products">
					{{product}}
				</li>
			</ul>
		</div>

		<script src="https://unpkg.com/vue"></script>
		<script type="text/javascript">
			const app = new Vue({
				el: '#app', // el是元素(Element)的缩写
				data: {
					products: [
						'Boots',
						'Jacket',
						'Socks'
					],
				},
			})
		</script>
	</body>
</html>

这样你就会看到:
在这里插入图片描述

不过这还不够有说服力,现在我们用更加复杂的数据来演示:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<ul>
				<li v-for="product in products">
					{{product.quantity}} {{product.name}}
				</li>
			</ul>
		</div>

		<script src="https://unpkg.com/vue"></script>
		<script type="text/javascript">
			const app = new Vue({
				el: '#app', // el是元素(Element)的缩写
				data: {
					products: [
						{'id': 1, 'quantity': 1, 'name': 'Compass'},
						{'id': 2, 'quantity': 0, 'name': 'Jack'},
						{'id': 3, 'quantity': 5, 'name': 'Hiking Socks'},
						{'id': 4, 'quantity': 2, 'name': 'Suntan Lotion'},
					],
				},
			})
		</script>
	</body>
</html>

在这里插入图片描述
这里需要留意一下数量为0的商品,我们添加一个span标签来对数量为0的商品做说明,这就需要用到v-if指令:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<ul>
				<li v-for="product in products">
					{{product.quantity}} {{product.name}}
					<span v-if="product.quantity === 0">- OUT OF STOCK!</span>
				</li>
			</ul>
		</div>

		<script src="https://unpkg.com/vue"></script>
		<script type="text/javascript">
			const app = new Vue({
				el: '#app', // el是元素(Element)的缩写
				data: {
					products: [
						{'id': 1, 'quantity': 1, 'name': 'Compass'},
						{'id': 2, 'quantity': 0, 'name': 'Jack'},
						{'id': 3, 'quantity': 5, 'name': 'Hiking Socks'},
						{'id': 4, 'quantity': 2, 'name': 'Suntan Lotion'},
					],
				},
			})
		</script>
	</body>
</html>

在这里插入图片描述

如果我们想要显示列表中商品的总数该怎么办呢?我们需要创建一个名为totalProducts的计算属性:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<ul>
				<li v-for="product in products">
					{{product.quantity}} {{product.name}}
					<span v-if="product.quantity === 0">- OUT OF STOCK!</span>
				</li>
			</ul>
			<h3>Total Inventory: {{totalProducts}}</h3>
		</div>

		<script src="https://unpkg.com/vue"></script>
		<script type="text/javascript">
			const app = new Vue({
				el: '#app', // el是元素(Element)的缩写
				data: {
					products: [
						{'id': 1, 'quantity': 1, 'name': 'Compass'},
						{'id': 2, 'quantity': 0, 'name': 'Jack'},
						{'id': 3, 'quantity': 5, 'name': 'Hiking Socks'},
						{'id': 4, 'quantity': 2, 'name': 'Suntan Lotion'},
					],
				},
				computed:{
					totalProducts(){
						return this.products.reduce((sum, product) => {
							return sum + product.quantity;
						}, 0);
					}
				}
			})
		</script>
	</body>
</html>

在这里插入图片描述

为了好玩,现在我们在命令行中吧数组中的最后一个元素pop出来:

app.products.pop()

可以看到,不仅我们的列表同步更新了,连我们的商品总数也如我们所预期的同步更新了:
在这里插入图片描述

接下来,让我们在页面中通过button来添加一些交互行为,我们为每一个商品创建一个增加按钮,点击时对应的商品数量就加一:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<ul>
				<li v-for="product in products">
					{{product.quantity}} {{product.name}}
					<span v-if="product.quantity === 0">- OUT OF STOCK!</span>
					<button @click="product.quantity += 1">Add</button>
				</li>
			</ul>
			<h3>Total Inventory: {{totalProducts}}</h3>
		</div>

		<script src="https://unpkg.com/vue"></script>
		<script type="text/javascript">
			const app = new Vue({
				el: '#app', // el是元素(Element)的缩写
				data: {
					products: [
						{'id': 1, 'quantity': 1, 'name': 'Compass'},
						{'id': 2, 'quantity': 0, 'name': 'Jack'},
						{'id': 3, 'quantity': 5, 'name': 'Hiking Socks'},
						{'id': 4, 'quantity': 2, 'name': 'Suntan Lotion'},
					],
				},
				computed:{
					totalProducts(){
						return this.products.reduce((sum, product) => {
							return sum + product.quantity;
						}, 0);
					}
				}
			})
		</script>
	</body>
</html>

当我们点击Jacket的Add时,不只是更新整个库存,同时增加对应商品的数量:
在这里插入图片描述

如果我们要大幅度更新商品的数量,单独通过点击按钮就太麻烦了,所以我们可以创建一个可输入的文本框,通过v-model指令绑定商品的数量:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<ul>
				<li v-for="product in products">
					<input type="number" v-model="product.quantity">
					{{product.name}}
					<span v-if="product.quantity === 0">- OUT OF STOCK!</span>
					<button @click="product.quantity += 1">Add</button>
				</li>
			</ul>
			<h3>Total Inventory: {{totalProducts}}</h3>
		</div>

		<script src="https://unpkg.com/vue"></script>
		<script type="text/javascript">
			const app = new Vue({
				el: '#app', // el是元素(Element)的缩写
				data: {
					products: [
						{'id': 1, 'quantity': 1, 'name': 'Compass'},
						{'id': 2, 'quantity': 0, 'name': 'Jacket'},
						{'id': 3, 'quantity': 5, 'name': 'Hiking Socks'},
						{'id': 4, 'quantity': 2, 'name': 'Suntan Lotion'},
					],
				},
				computed:{
					totalProducts(){
						return this.products.reduce((sum, product) => {
							return sum + parseInt(product.quantity);
						}, 0);
					}
				}
			})
		</script>
	</body>
</html>

在这里插入图片描述
好了,Vue的简单演示就到这里。


如果我们要构建一个大型的应用,需要将东西分割成为各自的组件和文件。
在这里插入图片描述

Vue提供了一个命令行工具,可以快速初始化一个Vue项目。
在这里插入图片描述

我们也可以使用Vue的单文件组件,它包含了各自的HTML,JavaScript以及带作用域的CSS或SCSS。
在这里插入图片描述


好了,Vue的已经简单讲完了,你现在看到的仅仅是Vue可以做的一些皮毛的小事情,在它的生态系统中有各种丰富的东西可以帮助构建、组织、发展前端应用,接下来我们继续学习。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章