今天就写一个极简单的小案例,对比原生JS和Vue两种不同实现方式,让大家来感受一下Vue给开发带来的便捷。
有些代码可能现在的你还看不懂,没关系,后面都会讲到。本篇的目的就是感受
先看效果图:
很简单,一个头像图片,一个姓名,一个年龄,这三个字段是模拟网络请求得到的数据。
原生JS实现
先看看使用原生JS实现方式:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>原生js实现</title>
<style>
body{
font-size: 20px;
}
.container {
background-color: white;
text-align: center;
}
.avatar {
width: 300px;
height: 300px;
border-radius: 50%;
margin: 30px 0;
}
.item {
padding: 20px;
font-size: 40px;
color: #666666;
}
.label {
font-size: 50px;
color: #333333;
}
</style>
</head>
<body>
<div class="container">
<img src="" class="avatar" id="avatar">
<div class="item">
<span class="label">姓名:</span>
<span id="name"></span>
</div>
<div class="item">
<span class="label">年龄:</span>
<span id="age"></span>
</div>
</div>
</body>
<script>
getData();
function getData() {
//模拟网络请求回去数据
setTimeout(function () {
const info = {
name: 'ayy',
age: 18,
url: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1577680045304&di=88435eeaa6bf261a5ba16c411f7a0a75&imgtype=0&src=http%3A%2F%2Fimage.biaobaiju.com%2Fuploads%2F20180802%2F03%2F1533152912-BmPIzdDxuT.jpg'
};
document.getElementById('avatar').src = info.url;
document.getElementById('name').textContent = info.name;
document.getElementById('age').textContent = info.age;
}, 1000);
}
</script>
</html>
样式和标签可以忽略不看,主要看js这里:
需要手动操作Dom,给每个元素赋值。更有甚者,我们应该见过这样的代码:
可读性暂且不说,这种代码特别容易出错。
Vue实现
看下Vue的实现方式:
<div class="container">
<img :src="url" class="avatar" id="avatar">
<div class="item">
<span class="label">姓名:</span>
<span id="name">{{name}}</span>
</div>
<div class="item">
<span class="label">年龄:</span>
<span id="age">{{age}}</span>
</div>
</div>
<script>
var vm = new Vue({
data:{
name:'',
age:0,
url:''
},
}).$mount('.container');
function getData() {
//模拟网络请求回去数据
setTimeout(function () {
const info = {
name: 'ayy',
age: 18,
url: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1577680045304&di=88435eeaa6bf261a5ba16c411f7a0a75&imgtype=0&src=http%3A%2F%2Fimage.biaobaiju.com%2Fuploads%2F20180802%2F03%2F1533152912-BmPIzdDxuT.jpg'
};
vm.name = info.name;
vm.age = info.age;
vm.url = info.url;
}, 1000);
}
getData();
</script>
没有一行操作Dom的代码,只需要改变data数据,视图会同步变化。代码是不是清爽多了。而且可读性提高,易于维护。