5.1 基本指令
5.1.1 v-cloak(遮掩) 一般与display:none进行结合使用
作用:解决初始化慢导致页面闪动的最佳实践
//css中 设置 [v-cloak] display:none ------------------------------
//html中 ------------------------------
{{msg}}
//vue中 ------------------------------
5.1.2 v-once
定义它的元素和组件只渲染一次
//html中 ------------------------------
{{msg}}
//vue中 ------------------------------
5.2 条件渲染指令
5.2.1 v-if, v-eles-if ,v-else
用法: 如果三个全用的话,就必须按照上面顺序
{{apple}}
{{orange}}
{{banana}}
--------------------------------
var app = new Vue({
el: '#app',
data: {
apple: '我是苹果',
orange: '我是橘子',
banana: '我是香蕉'
}
})
v-if的弊端 :
Vue 在渲染元素时 ,出于效率考虑,会尽可能地复用已有的元素而非重新渲染, 因此会出现乌龙只会渲染变化的元素。
如:
//这里的弊端,input元素被复用
用户名:
密码:
-------------------------------------------------------
var app = new Vue({
el: '#app',
data: {
type: 'name'
},
methods: {
trg: function(){
this.type = (this.type==='name' ? 'password' : 'name')
}
}
})
解决方法:加key
,提供key
唯一的值可以来决定是否复用该元素
如:
// 加入了key,key的值可以随便定义
// 如果两个不相等,那么就是唯一的,如果相等,那么代表可以复用
用户名:
密码:
-------------------------------------------------------
var app = new Vue({
el: '#app',
data: {
type: 'name'
},
methods: {
trg: function(){
this.type = (this.type==='name' ? 'password' : 'name')
}
}
})
5.2.2 v-show
只改变了css属性display
v-if 和 v-show 的比较
-
v-if
:
实时渲染:页面显示就渲染,不显示。我就给你移除 -
v-show
:
v-show的元素永远存在也页面中,只是改变了css的display的属性
代码举例:
// 在html中------------------------------------
{{msg}}
//相等于 下面代码
//------------------------------------------------------------------------
var app = new Vue({
el: '#app',
data: {
msg: '我是组件数据'
}
})
5.3 列表渲染指令v-for
用法: 当需要将一个数组遍历或枚举一个对象属性的时候循环显示时,就会用到列表渲染指令 v-for。
一定是写在遍历的元素上,v-for后面接等号,内容为 '申明一变量' in 'data中要遍历的一个数组'
两种使用场景:
- 遍历多个对象,那么一定是数组
- {{value.name}}
-----------------------------------------------------------
var app = new Vue({
el: '#app',
data: {
arrData: [
{name: '我是1号'},
{name: '我是2号'},
{name: '我是3号'},
]
}
})
---------------------------------------------------------------------------------
// 带索引的写法: 用括号,里面有两个变量,第一个为item,第二个为index
- {{index}} ---- {{value.name}}
- 遍历一个对象的多个属性
- {{value}}
-----------------------------------------------------------
var app = new Vue({
el: '#app',
data: {
objData:{
apple: '我是苹果',
orange: '我是橘子',
banana: '我是香蕉'
}
}
})
---------------------------------------------------------------------------------
// 带索引的写法: 用括号,里面有三个变量,第一个为item,第二个为key,第三个为index
- {{index}} :{{key}}---{{value.name}}
5.4 数组更新,过滤与排序
改变数组的一系列方法:
- push() 在末尾添加元素
- pop() 将数组的最后一个元素移除
- shift() 删除数组的第一个元素
- unshift() 在数组的第一个元素位置添加一个元素
- splice() 可以添加或者删除函数—返回删除的元素
三个参数:
第一个参数 表示开始操作的位置
第二个参数表示:要操作的长度
第三个为可选参数: - sort() 排序
- reverse() 倒序
- filter() 过滤
JS Bin
{{value}}
排序用法: sort()
倒序的用法: reverse()
过滤的用法: filter() 需要用到计算属性 computed
{{filData}}
两个数组变动vue检测不到:
- 改变数组的指定项
- 改变数组长度
解决方法:
1.set 改变指定项: Vue.set(app.arr,1,”car”);
2.splice 改变数组长度: app.arr.splice(1)
5.5 方法和事件
[object MouseEvent]
5.4.1 基本用法
v-on绑定的事件类似于原生 的onclick等写法
点击基数:{{count}}
------------------------------------------------------------------------------
var app = new Vue({
el: '#app',
data: {
count: 100
},
methods: {
oneNum: function(val){
val = val || 1
this.count = this.count + val
}
}
})
如果方法中带有参数,但是没有加括号,默认传原生事件对象event
5.4.2 修饰符
在vue中传入event对象用 $event
向上冒泡
- stop 阻止单击事件向上冒泡
- prevent 提交事件并且不重载页面
- self 只是作用在元素本身而非子元素的时候调用
- once 只执行一次的方法
可以监听键盘事件:
——指定的keyCode
stop: 阻止单击事件向上冒泡
prevent: 提交事件并且不重载
self: 只是作用在元素本身而非子元素的时候调用
once: 只执行一次
监听键盘事件:
----------------------------------------------------------------------
var app = new Vue({
el: '#app',
methods: {
divClick: function(){
alert('div被点击了')
},
btnClick: function(){
alert('botton被点击了')
},
hangle: function(){
alert('我不重载了')
},
onceClick: function(){
alert('开始执行了')
},
submitMe: function(){
alert('你按下了Enter')
}
}
})