Vue01 Vue介绍、Vue使用、Vue实例的创建、数据绑定、Vue实例的生命周期、差值与表达式、指令与事件、语法糖
1 Vue介绍
1.1 官方介绍
vue是一个简单小巧的渐进式的技术栈,它提供了Web开发中常用的高级功能:视图和数据的解耦、组件的服用、路由、状态管理、虚拟DOM
说明:简单小巧 -> 压缩后只有几十KB。 渐进式 -> 在利用vue进行前端项目开发时不必要一开始就使用所有vue提供的东西,而是根据开发需求循序渐进的添加vue提供的功能,这一点和angular恰恰相反(利用angular开发前端时需要将其核心模块的所有东西都先添加到项目中去)。
1.2 开发模式
vue采用MVVM模式进行开发(和angular采用的开发模式相同),View和ViewModel通过双向绑定建立联系;开发者再利用vue进行前端项目开发时只需要关注数据部分即可,DOM相关的事情vue会帮我们搞定
2 如何使用vue
2.1 引入Vue.js文件
利用script标签直接加载vue.js的CDN文件
<script src="https://unpkg.com/vue/dist/vue.min.js"></script>
技巧01:上面的语句会自动识别最新且稳定的Vue.js;也可义在vue后面添加版本来加载指定版本的vue.js,例如
<script src="https://unpkg.com/vue@2.1.6/dist/vue.min.js"></script>
2.2 创建Vue实例
<script>
new Vue({
el: '#book',
data: {
books: [
{name: '《Angular2揭秘》'},
{name: '《Angular2开发实战》'},
{name: '《Angular2从0到1》'},
{name: '《Vue.js实战》'}
]
}
});
</script>
技巧01:创建Vue实例的JS代码必须写在body中,加载vue.js的JS代码写在head或者body中都可以
2.3 编写HTML代码
<div id="book">
<ul>
<li v-for="book in books">{{ book.name }}</li>
</ul>
</div>
2.4 代码汇总
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Vue01</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
<script src="https://unpkg.com/vue@2.1.6/dist/vue.min.js"></script>
</head>
<body>
<div id="book">
<ul>
<li v-for="book in books">{{ book.name }}</li>
</ul>
</div> <script>
new Vue({
el: '#book',
data: {
books: [
{name: '《Angular2揭秘》'},
{name: '《Angular2开发实战》'},
{name: '《Angular2从0到1》'},
{name: '《Vue.js实战》'}
]
}
});
</script>
</body>
</html>
HTML
2.5 效果展示
3 创建Vue
利用Vue构造函数就可以创建一个Vue的根实例并启动Vue应用,例如
var dataBinding = new Vue({
el: '#dataBinding',
data: {
name: ''
}
});
代码解释:
Vue类提供了很多属性和方法,这里的el和data都是属性;所以在创建Vue实例的时候可以同时初始化这些属性和方法
技巧01:创建Vue实例时el是必填的属性,因为一个Vue实例必须和页面中某个DOM元素对应起来,el就是实现DOM元素和Vue实例的挂载的
4 数据绑定
在元素中使用v-model可以将元素和Vue实例提供的数据进行双向绑定,例如
<input type="text" id="name" v-model="name" placeholder="请输入你的姓名" >
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Vue01</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
<script src="https://unpkg.com/vue@2.1.6/dist/vue.min.js"></script>
</head>
<body>
<div id="dataBinding">
<label for="name">姓名:</label>
<input type="text" id="name" v-model="name" placeholder="请输入你的姓名" >
<br />
<h3>Hello, {{ name }}.</h3>
</div> <script>
var dataBinding = new Vue({
el: '#dataBinding',
data: {
name: 'warrior'
},
create: function() { },
mounted: function() {
console.log("=====start=====");
console.log(this.name);
console.log(this.$el);
console.log("=====end=====");
},
beforeDestroy() { }
});
</script>
</body>
</html>
5 Vue对象的生命周期
生命周期就是指在Vue实例从开始被创建到最后被消亡的的过程中需要经历的几个阶段,常用的生命周期钩子有:
5.1 create
Vue实例完成后调用,此阶段完成的数据的观测,但是并未完成DOM元素与Vue实例之间的挂载,常常用于数据初始化
5.2 mounted
el将Vue实例挂载到DOM元素后调用,常常用于处理第一个业务逻辑
5.3 beforeDestroy
Vue实例被销毁之前调用,常常用于解绑一些addEventListener监听的事件
5.4 实例代码
var dataBinding = new Vue({
el: '#dataBinding',
data: {
name: 'warrior'
},
create: function() { },
mounted: function() {
console.log("=====start=====");
console.log(this.name);
console.log(this.$el);
console.log("=====end=====");
},
beforeDestroy() { }
});
5.5 效果展示
6 插值与表达式
插值就是: {{ }}
表达式就是:跟angular的模板表达式类似,详情参见P160《Angular2揭秘》
技巧01:插值和表达式通常一起使用,{{ 表达式 }}
6.1 插值、表达式、生命周期的综合应用
需求:每间隔一秒就进行刷新的时间显示
<div id="time">
<h3>{{date}}</h3>
</div> <script>
var app = new Vue({
el: '#time',
data: {
date: new Date()
},
mounted: function() {
var _this = this;
this.timer = setInterval(function() {
_this.date = new Date();
}, 1000);
},
beforeDestroy: function() {
if (this.timer) {
clearInterval(this.timer);
}
}
});
</script>
代码说明:
var _this = this; -> this指向的是Vue实例,由于JS中存在作用域的问题,所以在方法中需要定义一个变量来指向Vue实例;如果在某个方法中直接使用this,那么这个this可能不是指向的Vue实例而是指向的该方法
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Vue01</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
<script src="https://unpkg.com/vue@2.1.6/dist/vue.min.js"></script>
</head>
<body>
<div id="time">
<h3>{{date}}</h3>
</div> <script>
var app = new Vue({
el: '#time',
data: {
date: new Date()
},
mounted: function() {
var _this = this;
this.timer = setInterval(function() {
_this.date = new Date();
}, 1000);
},
beforeDestroy: function() {
if (this.timer) {
clearInterval(this.timer);
}
}
});
</script> </body>
</html>
6.2 输出特例
6.2.1 输出HTML
在元素中利用 v-html 指令就可以将 Vue实例中的数据按照 HTML格式进行输出,这样就会将表达式的值作为用了v-html指令元素的子元素
6.2.2 原样输出
直接将 {{ 表达式 }} 进行原样输出只需要在对应元素上添加 v-html 指令即可
不添加 v-html 的效果
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Vue01</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
<script src="https://unpkg.com/vue@2.1.6/dist/vue.min.js"></script>
</head>
<body>
<span id="app">{{ link }}</span> <script>
var app = new Vue({
el: '#app',
data: {
link: '<a href="http://www.baidu.com">百度链接</a>'
}
});
</script> </body>
</html>
添加 v-html 的效果
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Vue01</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
<script src="https://unpkg.com/vue@2.1.6/dist/vue.min.js"></script>
</head>
<body>
<span v-pre id="app">{{ link }}</span> <script>
var app = new Vue({
el: '#app',
data: {
link: '<a href="http://www.baidu.com">百度链接</a>'
}
});
</script> </body>
</html>
7 指令与事件
7.1 指令
指令的作用就是扩展元素的功能
7.2 事件绑定
就是DOM元素的某一事件被触发后执行一些操作,利用 v-on 去绑定事件
7.3 指令和事件的综合运用
需求:点击显示和隐藏按钮分别可以实现时间的显示和隐藏功能
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Vue01</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
<script src="https://unpkg.com/vue@2.1.6/dist/vue.min.js"></script>
</head>
<body>
<div id="time">
<div v-if="showDate">
<label for="currentDate">当前时间:</label>
<span id="currentDate">{{date}}</span>
</div>
<div>
<button v-on:click="onAppear" >显示</button>
<button v-on:click="onDisappear">隐藏</button>
</div>
</div> <script>
var app = new Vue({
el: '#time',
data: {
date: new Date(),
showDate: true
},
mounted: function() {
var _this = this;
this.timer = setInterval(function() {
_this.date = new Date();
}, 1000);
},
beforeDestroy: function() {
if (this.timer) {
clearInterval(this.timer);
}
},
methods: {
onAppear: function() {
this.showDate = true;
},
onDisappear: function() {
this.showDate = false;
}
}
});
</script> </body>
</html>
7.4 语法糖
v-bind: 和 v-on: 可以用 : 和 @ 来代替,例如
<div>
<a v-bind:href="url">百度01</a>
<br />
<a :href="url">百度02</a>
<br />
<button v-on:click="onClick">测试01</button>
<button @click="onClick">测试02</button>
</div>
Vue01 Vue介绍、Vue使用、Vue实例的创建、数据绑定、Vue实例的生命周期、差值与表达式、指令与事件、语法糖的更多相关文章
- Windows 8实例教程系列 - 数据绑定高级实例
原文:Windows 8实例教程系列 - 数据绑定高级实例 上篇Windows 8实例教程系列 - 数据绑定基础实例中,介绍Windows 8应用开发数据绑定基础,其中包括一些简单的数据绑定控件的使用 ...
- Windows 8实例教程系列 - 数据绑定基础实例
原文:Windows 8实例教程系列 - 数据绑定基础实例 数据绑定是WPF,Silverlight以及Windows Phone应用开发中最为常用的开发技术,在基于XAML的Windows Stor ...
- Vue项目的创建、路由、及生命周期钩子
目录 一.Vue项目搭建 1.环境搭建 2.项目的创建 3.pycharm配置并启动vue项目 4.vue项目目录结构分析 5.Vue根据配置重新构建依赖 二.Vue项目创建时发生了什么 三.项目初始 ...
- Mybatis笔记六:Mybatis中SqlSessionFactoryBuilder/SqlSessionFactory/SqlSession/映射器实例的作用域(Scope)和生命周期
SqlSessionFactoryBuilder 这个类可以被实例化.使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了.因此 SqlSessionFactoryBuilder ...
- Vue实例和生命周期
创建一个Vue实例 每个Vue应用都是通过Vue函数创建一个新的Vue实例开始: var vm = new Vue({ //选项 }) 数据与方法 当一个Vue实例被创建时,它向Vue的响应式系统中加 ...
- vue3官网介绍,安装,创建一个vue实例
前言:这一章主要是vue的介绍.安装.以及如何创建一个vue实例. 一.vue介绍 vue3中文官网:建议先自己看官网. https://v3.cn.vuejs.org/ vue是渐进式框架,渐进式指 ...
- 05-Vue入门系列之Vue实例详解与生命周期
Vue的实例是Vue框架的入口,其实也就是前端的ViewModel,它包含了页面中的业务逻辑处理.数据模型等,当然它也有自己的一系列的生命周期的事件钩子,辅助我们进行对整个Vue实例生成.编译.挂着. ...
- python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)
昨日内容回顾 0. 组件注意事项!!! data属性必须是一个函数! 1. 注册全局组件 Vue.component('组件名',{ template: `` }) var app = new Vue ...
- Vue入门系列(五)Vue实例详解与生命周期
Vue官网: https://cn.vuejs.org/v2/guide/forms.html#基础用法 [入门系列] (一) http://www.cnblogs.com/gdsblog/p/78 ...
随机推荐
- Java 常用List集合使用场景分析
Java 常用List集合使用场景分析 过年前的最后一篇,本章通过介绍ArrayList,LinkedList,Vector,CopyOnWriteArrayList 底层实现原理和四个集合的区别.让 ...
- BZOJ 3786: 星系探索 [伪ETT]
传送门 数据,标程 题意: 一颗有根树,支持询问点到根路径权值和,子树加,换父亲 欧拉序列怎么求路径权值和? 一个点的权值只会给自己的子树中的点贡献,入栈权值正出栈权值负,求前缀和就行了! 和上题一样 ...
- docker-compose快速搭建lnmp+redis服务器环境
因为我用的是MacOS 安装docker sudo yum update sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrep ...
- MySQL对sum()字段 进行条件筛选,使用having,不能用where
显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区. SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY reg ...
- 统计输入的汉字,数字,英文,other数量
主要用正则表达式在完成对汉字,数字,英文数量的验证. import java.util.Scanner; /* * 统计汉字,数字,英文,other * */ public class Test { ...
- Thinkpad USB 经典键盘使用体验
先上图,这就是一个键盘,不是笔记本电脑. 优点: 1. 键盘完胜各类巧克力式键盘. 2. 小红点和老thinkpad 上的小红点一样好用. 3. ESC 和Delete 放大后,盲摸很方便. 缺点: ...
- 韩信点兵(hanxin)
相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排.五人一排.七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了.输入包含多组数据,每组数据包含3个非负整数a,b,c,表 ...
- SQLSERVER中分割字符串成多列
今天修改到之前的大佬的代码,居然把多个Id存在一个列里面,还是用的逗号分割...特么查询的时候怎么办??? 网上搜索了半天,终于找到了SqlServer里面有一个PARSENAME函数,可以按.(点) ...
- HDU - 3391 C - Mahjong
题意:如果摸到的14张麻将,可以组成4副三张麻将连续或者相同的,以及两个一样的就能获胜. 思路:直接暴力枚举每种可以摸到的牌型,用dfs判断当前拿到的14张牌型能否获胜. 如果搜索时不优化会超时,如果 ...
- 用pycharm+flask 建立项目以后运行出现ImportError: No module named flask-login问题
出现此问题,一般情况下: 打开CMD输入: pip install flask-login 然后,在cmd中输入命令: pip list 查看目前已安装的的模板.在此时,如果你继续运行项目,有可能会发 ...