156.Vue实现个人博客(四)【Vue2.0-自定义指令(钩子函数)】 2019.03.13

1、钩子函数
指令定义函数提供了几个钩子函数(可选):

  • bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。

  • inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。

  • update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新(详细的钩子函数参数见下)。

  • componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。

  • unbind: 只调用一次, 指令与元素解绑时调用。

接下来我们来看一下钩子函数的参数 (包括 el,binding,vnode,oldVnode) 。

2、钩子函数参数

钩子函数被赋予了以下参数:

  • el: 指令所绑定的元素,可以用来直接操作 DOM 。
  • binding: 一个对象,包含以下属性:
    • name: 指令名,不包括 v- 前缀。
    • value: 指令的绑定值, 例如: v-my-directive=“1 + 1”, value 的值是 2。
    • oldValue: 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
    • expression: 绑定值的字符串形式。 例如 v-my-directive=“1 + 1” , expression 的值是 “1 + 1”。
    • arg: 传给指令的参数。例如 v-my-directive:foo, arg 的值是 “foo”。
    • modifiers: 一个包含修饰符的对象。 例如: v-my-directive.foo.bar, 修饰符对象 modifiers 的值是 { foo: true, bar: true }。
  • vnode: Vue 编译生成的虚拟节点,查阅 VNode API 了解更多详情。
  • oldVnode: 上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

3、自定义指令

  • directives:注册局部自定义指令
  • directive:注册全局自定义指令

4、main.js文件

// 自定义一个v-rainbow指令,暂且不赋值
<h2 v-rainbow>{{blog.title}}</h2>

// 自定义一个v-theme指令,赋值为column=" 'narrow' "
// 在这里,双引号里面的 narrow的形式为字符串'',数组[]等对象,不能是一个具体的narrow
<div v-theme:column="'narrow'" id="show-blogs">



5、ShowBlog.vue文件

// 自定义指令

// 注册全局自定义directive,
// 第一个参数:指令名称:rainbow
// 第二个参数:对象,使用钩子函数bind绑定要执行的东西,
// el: 指令所绑定的元素
// binding: 一个对象
// vnode: Vue 编译生成的虚拟节点

Vue.directive('rainbow',{
	bind(el,binding,vnode){
	
	// 使用random()方法,随机生成标题的颜色
	el.style.color = "#" + Math.random().toString(16).slice(2,8);
	}
 })


// 自定义一个指令theme
Vue.directive('theme',{
	bind(el,binding,vnode){
	// 如果绑定的值为wide,页面最大宽度为1260px
	if (binding.value == 'wide') {
			el.style.maxWidth = "1260px";
		} 
	// 如果绑定的值value为narrow,页面最大宽度为560px
	else if (binding.value == 'narrow') {
			el.style.maxWidth = "560px";
		}

	// 如果绑定的参数arg是column,设置背景颜色为#6677cc,padding为20px
		if (binding.arg == 'column') {
			el.style.background = "#6677cc";
			el.style.padding = '20px';
		}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值