本文目前总结的特性以下
1.侦听属性和计算属性
2.class的绑定
3.条件渲染时的注意事项
4.v-if和v-for同时使用的注意事项
5.插槽
6.ref,父组件调用子组件的另外一种方式
7.<keep-alive>标签vue
计算属性computed
假设有A、B两个变量,B的值依赖于A,B=A的平方缓存
<p>A的值:{{A}}</p> <p>A的平方:{{B}}</p> //B的值依赖于A,当A发生改变时B也会改变 computed:{ B(){ //这个方法在A发生改变时会触发,返回值传给B return A*A } }
当计算很简单的时候,能够直接使用{{A*A}}来代替计算属性。
但是当计算变得逻辑变得复杂时,若是嵌套在template的表达式并不适用于这种方法,并且这样会使代码的可读性变差,难以维护
并且使用计算属性是有缓存的,只有当A发生改变时,才会再次触发性能
watch侦听属性
watch的功能computed相似,watch的方法在监听的属性改变时触发this
watch:{ A(){ this.B = A*A; } }
当一个元素的样式须要根据数据来动态改变时,使用:class属性
<div :class="{类名:变量}"></div>,类名是否存在取决于变量值是否为真code
当元素有多个样式时:
<div :class="['类1',{'类名2':变量2}]">input
类名也能够用计算属性来监听:
isEnoug为true,class="cartLeast unEmpty" 不然class="cartLeast"
<div :class="classObj"></div>
computed:{
classObj(){
let classArr = ['cartLeast'];it
if(this.isEnough){ classArr.push('unEmpty'); } return classArr;
}
}ast
在引用组件的时候增长class,这是组件child的类名有a,b两个
<template><div class="a"></div></template>
<child class="b"></child>class
vue为了高性能渲染,通常会复用已渲染过的标签。
假若有一个登陆框,根据选择的登陆方式切换input,一个是手机登陆,一个是邮箱登陆。由于vue会复用原来已有的input,因此当你切换到邮箱登陆时,input里还会保存有手机登陆时的内容,这显然是不符合条件的。
经过在input上添加key能够区别元素登录
<div class="" v-if="isSeen"> <input type="text" name="" value="" placeholder="enter a" key="a"> </div> <div class="" v-else> <input type="text" name="" value="" placeholder="enter b" key="b"> </div> <div class="" @click="isSeen=!isSeen"> toggle </div> data:{ isSeen:true }
v-for的优先级是高于v-if的,当只须要渲染知足一些特色条件的元素时,是颇有效的
可是当须要所有渲染时,把v-if放在外面
<div v-if="{{a}}"><div v-for="item in list"></div></div>