摘要:今天学习一下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实例简单方法和循环重复数据的更多相关文章

  1. Vue js 的生命周期详解

    Vue 实例的生命周期 Vue 实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom→渲染.更新→渲染.卸载等一系列 过程,我们称这是 Vue 的生命周期.通俗说就是 Vue ...

  2. Vue.js(2.x)之计算属性

    昨天看完大神的文章后,深感惭愧,硬着头皮继续看官网文档,然而这真的没是没办法,介绍的实在有些敷衍: 1).计算属性:也不说下computed是计算属性关键词,vm实例是可以像代理data一样代理com ...

  3. Vue.js之生命周期

    有时候,我们需要在实例创建过程中进行一些初始化的工作,以帮助我们完成项目中更复杂更丰富的需求开发,针对这样的需求,Vue提供给我们一系列的钩子函数. vue生命周期 beforeCreate 在实例初 ...

  4. Vue js 的生命周期(看了就懂)

    转自: https://blog.csdn.net/qq_24073885/article/details/60143856 用Vue框架,熟悉它的生命周期可以让开发更好的进行. 首先先看看官网的图, ...

  5. vue.js的生命周期 及其created和mounted的部分

    网上很多人有所总结,转载自: https://segmentfault.com/a/1190000008570622   关于created和mounted的部分,也可以参考: https://blo ...

  6. vue 生命周期钩子 过滤器 计算属性

    每一个Vue实例在被创建之前都要经过一系列的初始化过程.例如,实例需要配置数据观测.编译模板.挂载实例到DOM,然后在数据变化时更新DOM,在这个过程中,实例也会调用一些生命周期钩子,这就给我们提供了 ...

  7. Vue.js——5.生命周期

    Vue的生命周期 创建阶段new Vue1,beforeCreate() 表示在实例没有被创建出来之前会执行它加载data和methods2,caeated() data 和methods被初始化了 ...

  8. Vue.js 学习笔记 第3章 计算属性

    本篇目录: 3.1 什么是计算属性 3.2 计算属性用法 3.3 计算属性缓存 模板内容的表达式常用语简单的运算,当其过长或逻辑复杂时,会难以维护,本章的计算属性就是用于解决该问题的. 3.1 什么是 ...

  9. vue组件的生命周期

    先来张组件生命周期的示意图: 文档里是这样描述的:你不需要立马弄明白所有的东西,不过以后它会有帮助.传送门. Vue2.0的生命周期钩子一共有10个,同样结合官方文档作出了下表 生命周期钩子 详细 b ...

随机推荐

  1. Leetcode题解(五)

    17.Letter Combinations of a Phone Number 题目 针对输入的数字串,每一个数字都对应对个字符可以选择.因此可以直接采用递归的思想,依次遍历数字串的每一个数字,处理 ...

  2. Ignatius and the Princess II

    Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...

  3. A Very Simple Problem

    A Very Simple Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...

  4. 面试时,当你有权提问时,别客气,这是个逆转的好机会(内容摘自Java Web轻量级开发面试教程)

    前些天,我在博客园里写了篇文章,如何在面试中介绍自己的项目经验,收获了2千多个点击,这无疑鼓舞了我继续分享的热情,今天我来分享另外一个面试中的甚至可以帮助大家逆转的技巧,本文来是从 java web轻 ...

  5. CentOs6.8 hadoop集群搭建过程中的问题

    1.Error: Java heap space 网上有很多说是java虚拟机内存不够的,我也试着修改内存大小,但是没起作用,后来发现是文件在传输过程中失真.文件在上传到HDFS后变成乱码,重新上传文 ...

  6. AngularJS学习篇(十七)

    AngularJS 输入验证 <!DOCTYPE html> <html> <script src="http://apps.bdimg.com/libs/an ...

  7. rewirte 规则

    Nginx Rewrite Rewirte 规则也称为规则重写,主要功能是实现浏览器访问 HTTP URL 的跳转,其正则 表达式是基于 Perl 语言.通常而言,几乎所有的 WEB 服务器均可以支持 ...

  8. 用户需求与NABCD分析

    用户需求与NABCD分析 目录 项目简介 用户需求分析 调研途径 问卷情况说明 问卷反馈与分析 NABCD分析 Need 需求 Approach 途径 Benefit 好处 Competitors 竞 ...

  9. ajax事件请求

    首先,ajax是什么? ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. ajax是一种用于创建的快速动态网页的技术. 当async:true时,表示异步执行ajax代码:当as ...

  10. [转载] java多线程学习-java.util.concurrent详解(三)ScheduledThreadPoolExecutor

    转载自http://janeky.iteye.com/blog/770441 ------------------------------------------------------------- ...