vue for循环以及自定义指令

v-for

1.v-for用来循环的数组怎么发生变化可以被vue检测到:

  1. push、pop、shift、unshift、splice、sort、reverse等方法可以被检测到
  2. vue对于这些方法的处理是重写了这些方法,并在最后会触发一次notify方法来通知这个array已经发生变化
  3. vue还增加了两个方法来观测array的变化:
$set:如果直接设置array中的元素,不会触发视图的变化
	this.selectArray[1] = 'newValue'  // 不会触发视图变化
	this.selectArray.$set(1, 'newValue') // 会触发视图变化
	
$remove:是splice的语法糖,用来从目标元素中查找并且删除这个元素
	let itemIndex = this.selectArray.indexOf(selectItem)
	this.selectArray.splice(itemIndex,1) // 删除这个元素
	this.selectArray.$remove(selectItem) // 同样效果,不用查找index
  1. vue不能检测到下面数组的变化:
使用索引设置元素:
	this.selectArray[1] = 'newValue'
	解决办法:使用$set方法

修改数据的长度:
	this.selectArray.length = 0
	解决方法:使用空数组来替换:this.selectArray = []

2.使用v-for遍历对象

使用别名
<li v-for = "(key,value) in obj"> {{key}}-{{value}}</li>

不使用别名,使用$key
<li v-for = "value in obj"> {{$key}}-{{value}} </li>

注意:es5无法检测到对象增加新属性,所以vue提供了三个方法来监视对象属性:
$add(key,value)
$set(key,value)
$delete(key)

自定义指令

Vue.directive('directiveName',{
	// 这里就是指令对象的内部
	// 可以使用this来获取有用的参数
	bind: () => {
		//  准备工作:添加事件处理器等
		dom.addEventListener........
	},
	update: (oldVal,newVal) => {
		// 值更新的时候的工作
		//  初始化的时候也会被调用
	},
	unbind: () => {
		// 清理工作,比如接触bind添加的事件处理器
	}

})
或
Vue.directive('directiveName',(value) => {
	// 代替update函数
})

// 使用指令
<div directiveName="argumentValue"></div>

在指令对象中,可以只用this来获取一些有用的参数:

  • this.el: 指令绑定的元素
  • this.vm:指令的上下文viewModel
  • this.expression: 指令的表达式
  • this.arg:指令的参数
  • this.name: 指令的名字
  • this.modifiers:一个对象,指令的修饰符
  • this.descriptor: 一个对象,指令的解析结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值