vue.js之生命周期,防止闪烁,计算属性的使用,vue实例简单方法和循环重复数据
摘要:今天学习一下vue的生命周期,如何防止闪烁(也就是用户看得到花括号),计算属性的使用,vue实例简单方法,以及当有重复数据时如何循环
一、vue的生命周期:熟悉它的生命周期可以让开发更好的进行。
钩子函数:
created :实例已经创建
beforeCompile:编译之前
compiled :编译之后
ready:插入到文档中
beforedestroy :销毁之前
destroyed:销毁之后
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>生存周期</title>
<script src="vue.js"></script>
<script src="vue-resource.js"></script>
<script>
window.onload=function () {
var vm= new Vue({
el:'#box',
data:{
msg:'well'
},
created:function () {
alert('实例已创建')
},
beforeCompile:function () {
alert('编译之前')
},
compiled:function () {
alert('编译之后')
},
ready:function(){
alert('插入到文档中');
},
beforeDestroy:function(){
alert('销毁之前');
},
destroyed:function(){
alert('销毁之后');
}
});
/*点击页面销毁vue对象*/
document.onclick=function(){
vm.$destroy();
};
}
</script>
</head>
<body>
<div id="box">
{{msg}}
</div>
</body>
</html>
运行结果:弹出编译前,实例已创建,编译之前,编译之后,插入到文档中,然后页面显示msg的内容,最后点击页面的任何位置vue对象销毁 为了更好地理解这个过程,可以参照下面的这个图片进行了解
二、如何解决用户看到花括号的问题:页面加载时出现vuejs变量名
例如:当加载如下代码时
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title> <script src="vue.js"></script>
<script>
window.onload=function () {
var vm= new Vue({
el:"#box",
data:{
a:1
},
computed:{
b:function () {
return this.a+1;
}
}
});
document.onclick=function () {
vm.a=101;
}
}
</script>
</head>
<body>
<div id="box">
a=>{{a}}
<br>
b=>{{b}}
</div>
</body>
</html>
可能会闪现
a=>{{a}}
b=>{{b}}
所以有以下几种方法来解决这个问题
1、v-cloak 防止闪烁,用于 比较大段落
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>防止闪烁</title>
<style>
[v-cloak]{
display: none;
}
</style>
<script src="vue.js"></script>
<script>
window.onload=function () {
var vm= new Vue({
el:"#box",
data:{
a:1
},
computed:{
b:function () {
return this.a+1;
}
}
});
document.onclick=function () {
vm.a=101;
}
}
</script>
</head>
<body>
<div id="box" v-cloak>
a=>{{a}}
<br>
b=>{{b}}
</div>
</body>
</html>
原理:这段 CSS 的含义是,包含 v-cloak (cloak n. 披风,斗篷;vt. 遮盖,掩盖) 属性的 html 标签在页面初始化时会被隐藏。在 vuejs instance ready 之后,v-cloak 属性会被自动去除,也就是对应的标签会变为可见。
2、v-text方法
2.1当没有html标签的情况
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
<script>
window.onload=function () {
new Vue({
el:"#box",
data:{
msg:'welcome'
}
})
}
</script>
</head>
<body>
<div id="box">
<!--这种写法在网速比较慢的时候会看的见花括号-->
<span>{{msg}}</span>
<!--这种写法网速再慢也看不见花括号-->
<span v-text="msg"></span>
</div>
</body>
</html>
2.2当有html标签的时候:v-text不起作用了,{{{}}}有作用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
<script>
window.onload=function () {
new Vue({
el:"#box",
data:{
msg:'<strong>welcome</strong>'
}
})
}
</script>
</head>
<body>
<div id="box">
<span>{{{msg}}}</span>
<span v-text="msg"></span>
</div>
</body>
</html>
运行结果:
3、v-thml方法:解决到上面2.2的问题
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
<script>
window.onload=function () {
new Vue({
el:"#box",
data:{
msg:'<strong>welcome</strong>'
}
})
}
</script>
</head>
<body>
<div id="box">
<span>{{{msg}}}</span>
<span v-html="msg"></span>
</div>
</body>
</html>
运行结果:三、计算属性的使用 1、基本用法: 说明-〉b看起来像是一个函数名其实是一个属性,computed里面可以放置一些业务逻辑代码,一定记得return;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
<script>
window.onload=function () {
var vm= new Vue({
el:"#box",
data:{
a:1
},
computed:{
b:function () { //默认调用get
return this.a+1;
}
}
});
document.onclick=function () {
vm.a=101;
}
}
</script>
</head>
<body>
<div id="box">
a=>{{a}}
<br>
b=>{{b}}
</div>
</body>
</html>
运行结果:当a改变的时候b也跟着变化
点击页面之前:
点击页面之后:
2、计算属性的get和set方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
<script>
window.onload=function () {
var vm= new Vue({
el:"#box",
data:{
a:1
},
computed:{
b:{
get:function() { //将a的值加2后赋给b
return this.a+2;
},
set:function(val){
alert(val)
this.a=val;
} }
}
});
document.onclick=function () { //点击页面之后将vue实例对象vm的b设置为101,调用set()函数
vm.b=101;
}
}
</script>
</head>
<body>
<div id="box">
a=>{{a}}
<br>
b=>{{b}}
</div>
</body>
</html>
运行结果:
点击页面之前:
点击页面之后:
弹出101,并且页面变为

四、vue实例简单方法
1、vm.$el -> 就是元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue实例简单方法</title>
<script src="vue.js"></script>
<script >
window.onload=function () {
var vm=new Vue({
el:"#box",
data:{
a:1
}
});
console.log(vm.$el);
vm.$el.style.background='red'
}
</script>
</head>
<body>
<div id="box">
{{a}}
</div>
</body>
</html>
运行结果:


2、vm.$data -> 就是data
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue实例简单方法2</title>
<script src="vue.js"></script>
<script >
window.onload=function () {
var vm=new Vue({
el:"#box",
data:{
a:1
}
});
console.log(vm.$data);
console.log(vm.$data.a);
}
</script>
</head>
<body>
<div id="box">
{{a}}
</div>
</body>
</html>
运行结果:


3、vm.$mount -> 手动挂载vue程序
<!DOCTYPE ht<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue实例简单方法3</title>
<script src="vue.js"></script>
<script >
window.onload=function () {
//普通写法
var vm=new Vue({
//跟以前相比这里少了el,所以需要后面手动挂载
data:{
a:1
}
});
vm.$mount("#box"); //手动挂载
//链式写法
// var vm=new Vue({
// data:{
a:1
// }
// }).$mount("#box");//手动挂载
}
</script>
</head>
<body>
<div id="box">
<span v-text="a"></span>
</div>
</body>
</html>
4、vm.$options -> 获取自定义属性
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue实例简单方法3</title>
<script src="vue.js"></script>
<script >
window.onload=function () {
var vm=new Vue({
aa:11, //自定义属性
show:function () { //自定义方法
alert(1)
},
data:{
a:1
}
}).$mount("#box");
vm.$options.show(); //调用自定义方法
console.log(vm.$options.aa); //访问自定义属性
}
</script>
</head>
<body>
<div id="box">
<span v-text="a"></span>
</div>
</body>
</html>
运行结果:
弹出1,并且控制台输出11

5、vm.$log(); -> 查看现在数据的状态
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>智能社——http://www.zhinengshe.com</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<style> </style>
<script src="vue.js"></script>
<script> </script>
</head>
<body>
<div id="box">
<span v-text="a"></span>
</div>
<script> var vm=new Vue({
data:{
a:1,
b:2
}
}).$mount('#box'); console.log(vm.$log());
</script>
</body>
</html>
运行结果:

五、循环--数据重复: 当数据重复的时候,vue不会将其加载进来形成新的节点,为了解决这个没问题 vue提供了track-by="索引"这个属性,这个属性还能提高性能
下面代码将演示如何使用它
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>循环-重复数据</title>
<script src="vue.js"></script>
<script>
window.onload=function () {
new Vue({
el:"#box",
data:{
arr:['apple','pine','orange']
},
methods:{
add:function () {
this.arr.push('tomato')
}
}
})
}
</script>
</head>
<body>
<div id="box">
<input type="button" value="按钮" @click="add()">
<ul>
<li v-for="value in arr" track-by="$index">
{{value}}
</li>
</ul>
</div>
</body>
</html>
运行结果:点击按钮,tomato被显示在页面而且可以添加多次,如果没有track-by="索引"这个属性将只能添加一次

vue.js之生命周期,防止闪烁,计算属性的使用,vue实例简单方法和循环重复数据的更多相关文章
- Vue js 的生命周期详解
Vue 实例的生命周期 Vue 实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom→渲染.更新→渲染.卸载等一系列 过程,我们称这是 Vue 的生命周期.通俗说就是 Vue ...
- Vue.js(2.x)之计算属性
昨天看完大神的文章后,深感惭愧,硬着头皮继续看官网文档,然而这真的没是没办法,介绍的实在有些敷衍: 1).计算属性:也不说下computed是计算属性关键词,vm实例是可以像代理data一样代理com ...
- Vue.js之生命周期
有时候,我们需要在实例创建过程中进行一些初始化的工作,以帮助我们完成项目中更复杂更丰富的需求开发,针对这样的需求,Vue提供给我们一系列的钩子函数. vue生命周期 beforeCreate 在实例初 ...
- Vue js 的生命周期(看了就懂)
转自: https://blog.csdn.net/qq_24073885/article/details/60143856 用Vue框架,熟悉它的生命周期可以让开发更好的进行. 首先先看看官网的图, ...
- vue.js的生命周期 及其created和mounted的部分
网上很多人有所总结,转载自: https://segmentfault.com/a/1190000008570622 关于created和mounted的部分,也可以参考: https://blo ...
- vue 生命周期钩子 过滤器 计算属性
每一个Vue实例在被创建之前都要经过一系列的初始化过程.例如,实例需要配置数据观测.编译模板.挂载实例到DOM,然后在数据变化时更新DOM,在这个过程中,实例也会调用一些生命周期钩子,这就给我们提供了 ...
- Vue.js——5.生命周期
Vue的生命周期 创建阶段new Vue1,beforeCreate() 表示在实例没有被创建出来之前会执行它加载data和methods2,caeated() data 和methods被初始化了 ...
- Vue.js 学习笔记 第3章 计算属性
本篇目录: 3.1 什么是计算属性 3.2 计算属性用法 3.3 计算属性缓存 模板内容的表达式常用语简单的运算,当其过长或逻辑复杂时,会难以维护,本章的计算属性就是用于解决该问题的. 3.1 什么是 ...
- vue组件的生命周期
先来张组件生命周期的示意图: 文档里是这样描述的:你不需要立马弄明白所有的东西,不过以后它会有帮助.传送门. Vue2.0的生命周期钩子一共有10个,同样结合官方文档作出了下表 生命周期钩子 详细 b ...
随机推荐
- 暑假练习赛 006 A Vanya and Food Processor(模拟)
Description Vanya smashes potato in a vertical food processor. At each moment of time the height of ...
- window.onload,document.ready
执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕. 编写个数不同 wind ...
- display、visibility、visible区别
标签的隐藏可以有三种:display.visibility.服务器控件的visible. 显然,这三者都能起到隐藏与显示的效果,但是用途确完全不一样,请看用法与区别: <div style=&q ...
- SQL查询多条不重复记录值简要解析【转载】
转载http://hi.baidu.com/my_favourate/item/3716b0cbe125f312505058eb SQL查询多条不重复记录值简要解析2008-02-28 11:36 以 ...
- vue初级学习--idea的环境搭建
一.导语 最近接触了下idea,虽然我对于各种"代码界的神器"没有多大感冒,一个eclipse或者myeclipse,一个Notepad++ .一个就可以把我征服,但还是蛮喜欢id ...
- HTML学习笔记 css定位浮动及瀑布流案例 第十三节 (原创) 参考使用表
#fd { width: 100px; height: 150px; background-color: forestgreen; float: left; } #sd { width: 150px; ...
- Problem F: 分数类的类型转换
Description 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作: 1. 构造:传入两个参数n和m,表示n/m:分数在构造时立即转化成最简分数. 2. show()函数:分数 ...
- asp.net 自定义的模板方法接口通用类型
本来想写这个帖子已经很久了,但是公司事情多,做着做着就忘记了.公司因为需要做接口,而且用的还是asp.net的老框架,使用Handler来做,没得办法,自己照着MVC写了一个通过的接口操作模板. 上送 ...
- 插件lombok的介绍安装
Lombok插件 介绍一个不错的Eclipse插件Lombok 该插件对Log4j简化的代码,因为不大,所以jar包也存在呢! Lombox是Eclipse的一个插件,用来自动生成Java代码,减少手 ...
- 网页如何展示PPT文档
最近再做一个新项目,其中有一个难点,就是如何在网页上展示PPT,我网上找到了几种方法,但是真正符合我目前这个项目的就只有这一种方法了, 使用PowerPoint to Flash将ppt文 ...


三、计算属性的使用
1、基本用法: 说明-〉b看起来像是一个函数名其实是一个属性,computed里面可以放置一些业务逻辑代码,一定记得return;

