Vue全家桶之Vue基础
Posted 前端加油
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue全家桶之Vue基础相关的知识,希望对你有一定的参考价值。
Vue全家桶之Vue基础
文章目录
1. Vue概述
Vue
(读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。
渐进式
: 声明式渲染→组件系统→客户端路由→集中式状态管理→项目构建
可以使用其中的一个或者多个
优点
:
- 易用:熟悉html,CSS.javascript知识后,可快速上手Vue
- 灵活:在一个库和一套完整框架之间自如伸缩
- 高效:20kB运行大小,超快虚拟DOM
2. Vue的基本使用
2.1 传统开发模式对比
//原生JS
<div id="msg"></div>
<script type="text/javascript">
var msg = 'Hello World'
var div = document.querySelector('#msg');
div.innerHTML = msg
</script>
//jQuery
<div id="msg"></div>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
var msg = 'Hello World';
$('#msg').html(msg);
</script>
2.2 Vue.js之HelloWorld基本步骤
引入Vue的方法:
1.下载Vue.js,然后在<script type='text/javascript' src='js/vue.js'></script>
引入
2.使用CDN方法。 <script src="https://cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.js"></script>
Vue的基本使用步骤
:
1、需要提供标签用于填充数据
2、引入Vue.js库文件
3、可以使用vue的语法做功能了
4、把vue提供的数据填充到标签里面
//1.HelloWorld.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="app">
//插值表达式
<div>{{num}}</div>
<div><button @click='handle'>点击</button></div>
</div>
//引入vue
<script type='text/javascript' src='js/vue.js'></script>
<script type='text/javascript'>
var vm = new Vue({
el: '#app',
data: {
num: 0
},
methods: {
handle: function () {
this.num++;
}
}
});
</script>
</body>
</html>
2.3 Vue.js之HelloWorld细节分析
1. 实例参数分析
- el:元素的挂载位置(值可以是CSS选择器或者DOM元素)关联起来
- data:模型数据(值是一个对象)
- methods,该属性用于在Vue对象中定义方法。
2.插值表达式用法
- 将数据填充到HTML标签中
- 插值表达式支持基本的计算操作
3. Vue代码运行原理分析
- 概述编译过程的概念(Vue语法经过Vue框架编译成原生JS语法,才能够被浏览器执行)
3. Vue 模板语法
3.1 模板语法概述
前端渲染
:把数据填充到HTML标签中
前端渲染方式
:
- 原生js拼接字符串
- 使用前端模板引擎
- 使用vue特有的模板语法(推荐)
原生js拼接字符串
基本上就是将数据以字符串的方式拼接到HTML标签中。
缺点:不同开发人员的代码风格差别很大,随着业务的复杂,后期的维护变得逐渐困难起来。
使用前端模板引擎
是基于模板引擎art-template的一段代码,与拼接字符串相比,代码明显规范了很多,它拥有自己的一套模板语法规则。
优点:大家都遵循同样的规则写代码,代码可读性明显提高了,方便后期的维护。
缺点:没有专门提供事件机制。
插值表达式 {{变量}}
- 使用’mustache’语法 {{ msg }}(双花括号)
- mustache 标签将会被替换为 data 对象上对应的 msg 属性的值。
- 只要绑定的数据对象上的 msg 属性发生改变,插值内容也会随之更新。
<div id="app">
<!-- this 指向 vm -->
<p> {{ msg }} </p>
</div>
<script>
var vm = new Vue({
el: ‘#app’,
data: {
msg: 'hello vue.js'
}
})
</script>
模板语法概述
- 插值表达式
- 指令
- 事件绑定
- 属性绑定
- 样式绑定
- 分支循环结构
3.2 指令
1.什么是指令?
- 自定义属性:如在html5中定义,属性均可随意命名。
- 指令的本质就是自定义属性
- 指令的格式:以v-开始(比如:v-cloak)
2.v-cloak指令用法
插值表达式存在的问题:“闪动”
如何解决该问题:使用v-cloak指令
v-cloak指令的用法
1、提供样式
属性选择器
[v-cloak]{
display: none;
}
2、在插值表达式所在的标签中添加v-cloak指令
背后的原理:先通过样式隐藏内容,然后在内存中进行值的替换,替换好之后再显示最终的结果
//02-指令v-cloak的用法.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
</head>
<body>
<div id="app">
<div v-cloak>{{msg}}</div>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
var app = new Vue({
el: '#app',
data: {
msg: 'Hello Vue'
}
});
</script>
</body>
</html>
3 .数据绑定指令
-
v-text填充纯文本
用于将数据填充到标签中,作用于插值表达式类似,但是没有闪动问题
-
v-html填充HTML片段
用于将HTML片段填充到标签中,但是可能有安全问题
-
v-pre填充原始信息
显示原始信息,跳过编译过程(分析编译过程)
//03-数据填充相关3个指令用法.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<div>{{msg}}</div>
<div v-text='msg'></div>
<div v-html='msg1'></div>
<div v-pre>{{msg}}</div>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
el: '#app',
data: {
msg: 'Hello Vue',
msg1: '<h1>HTML</h1>'
}
});
</script>
</body>
</html>
4.数据响应式
-
如何理解响应式
html5中的响应式(屏幕尺寸的变化导致样式的变化)
数据的响应式(数据的变化导致页面内容的变化) -
数据绑定:将数据填充到标签中,默认是响应式的
-
v-once只编译一次,显示内容之后不再具有响应式功能
v-once的应用场景:如果显示的信息后续不需要再修改,可以使用v-once提高性能。
//04-指令v-once的用法.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<h2>{{message}}</h2>
<h2 v-once>{{message}}</h2>
</div>
<script>
const app = new Vue({
el: "#app",
data: {
message: "你好啊"
}
})
</script>
</body>
</html>
3.3 双向数据绑定
1.什么是双向数据绑定?
2.双向数据绑定分析
Vue中使用v-mode
l指令来实现标签内容的绑定(双向绑定)
.如表单元素和数据的双向绑定
v-model只能用于表单类型,就是输入性控件,其他控件不能用,用v-bind
<input type='text' v-model='uname'/>
//05.双向数据绑定.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<div>{{msg}}</div>
<div>
<input type="text" v-model='msg'>
</div>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
/* 双向数据绑定
1、从页面(用户)到数据
2、从数据到页面 */
var vm = new Vue({
el: '#app',
data: {
msg: 'Hello Vue'
}
});
</script>
</body>
</html>
案例解析:
当我们在输入框输入内容时,因为input中的v-model绑定了msg,所以会实时将输入的内容传递给msg,msg发生改变。
当msg发生改变时,因为上面我们使用Mustache语法,将msg的值插入到DOM中,所以DOM会发生响应的改变。
3.MVVM设计思想
M
VVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开
- View层:视图层
在我们前端开发中,通常就是DOM层。主要的作用是给用户展示各种信息。
- Model层:数据层
数据可能是我们固定的死数据,更多的是来自我们服务器,从网络上请求下来的数据。
- VueModel层:视图模型层
视图模型层是View和Model沟通的桥梁。
一方面它通过Data Binding(数据绑定),将Model的改变实时的反应到View中
另一方面它通过DOM Listener(DOM监听),当DOM发生一些事件(点击、滚动、touch等)时,可以监听到,并在需要的情况下改变对应的Data。
3.4 事件绑定
1.Vue如何处理事件?
-
v-on指令用法:
用于绑定HTML事件
,如鼠标点击事件 -
当前button绑定鼠标点击事件,点击则调用doSomething方法
在这里doSomething() 是一个函数,可以写在methods的方法中,供该标签调用.
<button v-on:click="doSomething">...</button>
- v-on语法糖(简写形式)@
<input type='button' @click='num++'/>
//06-事件基本用法.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<div>{{num}}</div>
<div>
//4种都可以实现
<button v-on:click='num++'>点击</button>
<button @click='num++'>点击1</button>
<button @click='handle'>点击2</button>
<button @click='handle()'>点击3</button>
</div>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
el: '#app',
data: {
num: 0
},
methods: {
handle: function () {
// 这里的this是Vue的实例对象
console.log(this === vm)
// 在函数中 想要使用data里面的数据 一定要加this
this.num++;v
}
}
});
</script>
</body>
</html>
2.事件函数的调用方式
- 直接绑定函数名称
<button v-on:click='say'>Hello</button>
- 调用函数
<button v-on:click='say()'>Hello</button>
3.事件函数参数传递
- 事件函数参数传递
<button v-on:click='say('hi',$event)'>Hello</button>
//07-事件函数传参.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<div>{{num}}</div>
<div>
<!-- 如果事件直接绑定函数名称,那么默认会传递事件对象作为事件函数的第一个参数 -->
<button v-on:click='handle1'>点击1</button>
<!-- 2、如果事件绑定函数调用,那么事件对象必须作为最后一个参数显示传递,
并且事件对象的名称必须是$event -->
<button v-on:click='handle2(123, 456, $event)'>点击2</button>
</div>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
el: '#app',
data: {
num: 0
},
methods: {
handle1: function(event) {
console.log(event.target.innerHTML)
},
handle2: function(p, p1, event) {
console.log(p, p1)
console.log(event.target.innerHTML)
this.num++;
}
}
});
</script>
</body>
</html>
4.事件修饰符
- .stop 阻止冒泡
<a v-on:click.stop="handle">跳转</a>
- .prevent阻止默认行为
<a v-on:click.prevent="handle">跳转</a>
//08-事件修饰符.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<div>{{num}}</div>
<div @click='handle0'>
<button @click.stop='handle1'>点击1</button>
</div>
<div>
<a href="http://www.baidu.com" @click.prevent='handle2'>百度</a>
</div>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
el: '#app',
data: {
num: 0
},
methods: {
handle0: function () {
this.num++;
},
handle1: function (event) {
// js阻止冒泡
// event.stopPropagation();
},
handle2: function (event) {
// js阻止默认行为
// event.preventDefault();
}
}
});
</script>
</body>
</html>
未加事件修饰符:
加事件修饰符:
5.按键修饰符
- .enter 回车键
<input v-on:keyup.enter='submit'>
- .delete删除键
<input v-on:keyup.delete='handle'>
//09-按键修饰符.html
<!DOCTYPE html>
<html lang="en">
<head>
以上是关于Vue全家桶之Vue基础的主要内容,如果未能解决你的问题,请参考以下文章