提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
学习背景
由于作者之前虽然上手了Vue项目,但实际上并没有系统学习过Vue相关基础知识,对其中的原理理解得不够深刻,因此作者目前在看尚硅谷有关Vue的系列教程,并通过博客的形式将所学习的知识点进行记录,便于他人快速上手学习和自身复习~
vue:一套用于构建用户界面的渐进式框架。
特点:
打开Vue官网,安装部分我们可以看到有开发版本和生产版本两种:开发版本适合在开发过程中使用,包含完整的警告和调试模式;生产版本适合在项目完成上线时使用,较为轻量级。
下载下来,分别是vue.js和vue.min.js文件:
可以通过下面代码使用vue:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>初始Vuetitle>
<script src="vuejs/vue.js">script>
head>
<body>
body>
html>
productionTip属性为boolean类型,设置为false以阻止vue在启动时生成生产提示。
添加以下代码,错误二提示即可消失:
<script>
Vue.config.productionTip = false;
</script>
以下是一个使用vue的简单示例:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<script src="js/vue.js">script>
head>
<body>
<div id="root">
<h1> Hello {{name}}h1>
div>
<script type="text/javascript">
Vue.config.productionTip = false;
new Vue({
el: '#root', // 指定当前Vue示例为哪个容器服务,值通常为CSS选择器字符串
data: { // data中用于存储数据
name:'lalala'
}
})
script>
body>
html>
注意事项:
Vue模板语法有2大类:
使用v-bind和v-model指令如下所示:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<script src="js/vue.js">script>
head>
<body>
<div id="root">
<h1> Hello {{name}}h1>
单向数据绑定:<input type="text" name="" id="" v-bind:value="name">
双向数据绑定:<input type="text" name="" id="" v-model:value="name">
div>
<script type="text/javascript">
Vue.config.productionTip = false;
new Vue({
el: '#root', // 指定当前Vue示例为哪个容器服务,值通常为CSS选择器字符串
data: { // data中用于存储数据
name:'lalala'
}
})
script>
body>
html>
总结如下:
Vue有两种数据绑定的方式:
<script type="text/javascript">
Vue.config.productionTip = false;
const v = new Vue({
// el: '#root', // 指定当前Vue实例为哪个容器服务,值通常为CSS选择器字符串
data: { // data中用于存储数据
name:'lalala'
}
})
v.$mount('#root');
script>
// 第一种:对象式
data: {
name:'lalala'
}
// 第二种:函数式
data: function() {
return{
name:'lalala'
}
}
注意:采用函数式方法时,data函数可以将:function省略,注意不要使用箭头函数:当前写法this对应的vue实例,如果采用箭头函数的写法,所对应的的this是window。
let number = 19;
let person = {
name: '张三',
sex: '男'
// age: number
}
Object.defineProperty(person, 'age', {
value: 18,
enumerable: true, // 控制属性是否可以被枚举
writable: true, // 控制属性是否可以被修改
configurable: true, // 控制属性是否可以被删除
get() {
return number;
},
set(value) {
number = value;
}
})
- 数据代理:通过一个对象代理对另一对象中属性的操作
简单的示例如下:
let obj = {x: 100};
let obj1 = {y: 200};
Object.defineProperty(obj1, 'x', {
get() {
return obj.x;
},
set(value) {
obj.x = value;
}
})
打印vm实例,可以看到也是通过getter和setter来进行数据代理:
实际上Vue数据代理的具体原理如下:
不难找到Vue实例中的_data属性,确实存储了data的相关数据,之后通过在Vue实例中创建相应的属性,通过Object.defineProperty完成数据代理。
本文主要总结了Vue实例创建、模板语法、数据绑定、MVVM模型、数据代理等相关知识。