vue3中自定义指令的小demo

vue3的自定义组件的用法跟vue2一致,但是内置的钩子有所不同。
在这里插入图片描述
在这里插入图片描述
下面根据自定义指令知识点衍生的一个小例子,该例子没有特别的技术难点。只是为了验证一下这两天学习的vue3部分知识点,存粹是一个练手记录~~~

//示例

<template>
	<p>
		改变方向:<input type="text" v-model="direction" />
	</p>
	<p>
		改变数值:<input type="range" min="0" :max="maxNum" v-model="pinPadding" />
	</p>
	<p>
		<button @click="reset">重置</button>
	</p>
	<div style="position: relative;border: 1px solid red;width: 800px;height: 400px;margin: 0 auto;">
		<p v-pin:[direction]="pinPadding">数据:{{pinPadding}},方向:{{direction}}</p>
	</div>
</template>
<script>
	import two from './components/two.vue'
	import {
		ref,
		reactive,
		defineComponent,
		computed
	} from 'vue'
	export default ({
		name: 'lycApp',
		components: {
			two
		},
		setup(prop, context) {
			const direction = ref('left')
			const pinPadding = ref(0)
			const reset = () => {
				direction.value = 'left'
				pinPadding.value = 0
			}
			const maxNum = computed(()=>{
				if(direction.value == 'right' || direction.value == 'left'){
					return 650
				}else{
					return 360
				}
			})
			return {
				direction,
				pinPadding,
				reset,
				maxNum
			}
		},
		directives: {
			pin: {
				mounted(el, binding) {
					el.style.position = 'absolute'
					const s = binding.arg
					el.style[s] = binding.value + 'px'
				},
				updated(el, binding) {
					el.removeAttribute('style')
					el.style.position = 'absolute'
					const s = binding.arg
					el.style[s] = binding.value + 'px'
				}
			}
		}
	})
</script>

//效果图
在这里插入图片描述

可以在红色线框内随便改变方向跟距离。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值