1.v-once

2.v-html
插入html内容时直接使用{{}}将会被渲染成普通文本,使用v-html才会被渲染为html元素
<h1>{{htmlTxt}}</h1>
<h1 v-html>{{htmlTxt}}</h1>
data:{ htmlTxt:"<span>hello</span>" }
3.计算属性
<div>{{firstname+lastname}}</div>
data:{
firstname:"张",
lastname:"三"
}
在HTML中使用js表达式时每次渲染都会计算一次,无论值有没有改变。
使用计算属性会提高渲染效率;
<div>{{fullname}} </div>
data(){
return {
firstname:'张',
lastname:'三'
}
},
computed:{
fullname:function(){
return this.firstname + this.lastname
}
},
computed属性在变量值多次修改时会提高效率,它会将上次计算结果缓存下来,只有在变量内容改变时才会重新计算,而第一种表达式写法在每次都会重新计算。
//字符串逆序显示 <div>{{word.split("").reverse().join("")}}</div> data(){ return { firstname:'张', lastname:'三', word:'music' } },
//数组过滤 <ul> <li v-for="item,index in oddnums" :key="index"> <h3>{{item.num}}</h3> </li> </ul> data(){ return { nums:[ { id:1, num:1 }, { id:2, num:2 }, { id:3, num:3 }, { id:4, num:4 } ] } }, computed:{ oddnums:function(){ return this.nums.filter((item)=>{ return item.num%2 == 0 }) } },
4. class绑定
//通过对象的方式决定是否存在某个类 对象里面可以放多个变量 <div :class="{active:isActive}"></div> //也可以和固定class同时使用 <div class="page" :class="{active:isActive}"></div> //直接放对象 <div :class="styleObj"></div> //直接放数组 <div :class="styleArr"></div>
//数组和对象混合使用
<div :class="styleObjArr"></div> data(){ return { isActive:true, styleObj:{active:false,test1:true,"test-1":false} styleArr:['red-bg','color'],
styleObjArr:['red-bg',{active:true}]
}
}
<style> .active{ width: 200px; height: 200px; background-color: skyblue; } </style>
5.事件修饰符
<!-- .stop阻止事件冒泡,否则 clickparent clickevent 都会触发 -->
<div class="btnparent" @click="clickParent">
<button @click.stop="clickEvent">按钮</button> //不加stop 输出clickparent clickevent 加stop只输出clickevent
</div>
clickParent(){
console.log('clickParent')
},
clickEvent(){
console.log('clickEvent')
},
6.表单输入绑定
<!-- 表单输入绑定 双向绑定-->
<div id="app">
<!-- 输入框绑定 -->
<input type="text" v-model="username">
<h3>{{username}}</h3>
<!-- 复选框绑定 -->
<span v-for="(item,index) in fruits" :key="index" >
{{item}}
<input type="checkbox" v-model="checked" :value="item">
</span>
<h2>{{checked}}</h2>
<!-- 单选框绑定 -->
<span v-for="(item,index) in fruits" :key="index" >
{{item}}
<input type="radio" v-model="radiochecked" :value="item">
</span>
<h2>{{radiochecked}}</h2>
<!-- 下拉选择框 -->
<select name="select" id="" v-model="selected" >
<option value="" disabled>请选择</option>
<option v-for="(item,index) in fruits" :key="index" :value="item">{{item}}</option>
</select>
<h2>{{selected}}</h2>
<!-- 下拉复选框 按住ctrl复选 -->
<select name="select" id="" v-model="mutiselected" multiple="multiple">
<option v-for="(item,index) in fruits" :key="index" :value="item">{{item}}</option>
</select>
<h2>{{mutiselected}}</h2>
<!-- 绑定值一般返回字符串 使用number修饰符修改 -->
<h2>未转换</h2>
<input type="text" name="age" v-model="age" >
<h3>{{age}}----{{typeof age}}</h3>
<h2>转换后</h2>
<input type="text" name="age" v-model.number="age" >
<h3>{{age}}----{{typeof age}}</h3>
</div>
data:{
age:'',
fruits:['苹果','香蕉','梨'],
checked:[],
selected:'',
mutiselected:[],
radiochecked:'',
username:'姓名',
}
7.过渡动画(有问题,进入动画不生效)
<!-- 过渡动画 -->
<button @click="isShow = !isShow">切换按钮</button>
<transition name="slide">
<!-- todo 只有淡出动画,进入动画无效 -->
<div v-if="isShow" class="changediv"></div>
</transition>
data:{
isShow:true
}
<style>
.slide-enter-active, .slide-leave-active {
transition: all 2s ease;
}
.slide-enter, .slide-leave-to /* .slide-leave-active below version 2.1.8 */ {
transform: translateX(500px);
/* opacity: 0; */
}
.changediv{
width: 200px;
height: 200px;
background-color: red;
}
</style>
8.vue生命周期
beforecreate:数据和事件方法此时还未绑定到创建的vue对象上
created: 数据data和事件方法methods已经绑定到vue对象上
beforemount:渲染之前,根据数据生成的dom对象是获取不到的
mounted:渲染之后,可以获取到数据生成的dom对象
beforeupdate:数据内容更新,但还未渲染到页面元素上
updated: 数据更新,页面内容也更新
beforedestory: 应用销毁之前
destoryed:应用销毁之后
注:页面上使用v-if时,每次true都会触发 beforecreate created beforemount mounted事件,每次false都会触发 beforedestory destoryed事件
v-show只有第一次会触发,其余时候不会,原理(display:none)
9.组件间传值
父组件向子组件传值:使用props
子组件向父组件传值1:使用$emit触发父组件事件,父组件监听该事件
//父组件 <child @fathermethod="fathermethod"></child> fathermethod(data){ //接收子组件传值数据并处理 } //子组件 childMethod(){ this.$emit('fatherMethod',data) }
子组件向父组件传值2:父组件直接将函数传递给子组件,子组件调用函数直接修改父组件的值
//父组件页面 <child :event="fathermethod"></child> methods:{ fathermethod(data){ //console.log(data) } } //子组件页面 props:{ event } methods:{ childMethods(){ this.event(data) } }
子组件向父组件传值3:使用$parent直接调用父组件函数或修改父组件数据值
//子组件页面
<button @click="$parent.fathermethod(data)"></button> <button @click="$parent.fatherdata = data"></button>
其他:$root.$children[0]....
10.组件上使用v-model
//子组件 <template> <input type="text" @input="$emit('input', $event.target.value)" v-model="username" > </template> <script> export default { name: 'modelItem', props:{ username:String }, } </script> //父组件 <template> <div class="home"> <model-Item v-model="username"/> <h3>{{username}}</h3> </div> </template> <script> import modelItem from '@/components/v-model' export default { name: 'Home', components: { modelItem }, data(){ return{ username:'' } } </script>
11.插槽
//slot.vue <template> <div class='container'> <div class="title">标题</div> <div class="content"> <slot></slot> </div> </div> </template> //home.vue <template> <div class="home"> <!-- slot里面的变量内容只跟父元素有关 --> <slot-Item> <p>插槽内容,{{username}}</p> </slot-Item> </div> </template> data(){ return{ username:'11' } },
12.动态组件
使用 is attribute 来切换不同的组件
<component :is="currentTabComponent"></component>
<!-- 失活的组件将会在第一次创建后被缓存!-->
<keep-alive>
<component v-bind:is="currentTabComponent"></component>
</keep-alive>
13.less
声明变量: @main-color:#ccc
混合:
.default{ margin:0; padding:0; } .container{ .default() border:1px solid @main-color }
其他:Less 快速入门 | Less.js 中文文档 - Less 中文网 (bootcss.com)
14.sass
变量声明:$primary-color: #333;
父选择器标识符:&
.article a{ &:hover{ //此处&:hover 等价 a:hover .... } }
嵌套:Sass: Sass Basics | Sass 中文网 (bootcss.com)
浙公网安备 33010602011771号