【13】vue.js — 自定义指定(directive)

本文介绍了Vue.js中自定义指令的应用实例,包括颜色指定、生命周期钩子及拖拽效果实现等,展示了如何通过自定义指令增强组件交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义指定的操作

自定义指定使用时前面必须得加v-

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript" src="js/vue.js" ></script>
    </head>
    <body>
        <div id="box">
            <!-- 使用自定义color指定,调取data中red的值 -->
            <span v-color="red">自定义指定01</span>
            <span v-color="blue">自定义指定02</span>
            <span v-color="yellow">自定义指定03</span>
        </div>
    </body>
    <script>
        window.onload=function(){
            Vue.directive('color',function(color){
                //接收参数,但执行v-color指令时
                this.el.style.color = color;
            });
            var vm = new Vue({
                el: '#box',
                data: {
                    msg: 'welcome',
                    red: 'red',
                    blue: 'blue',
                    yellow: 'yellow'
                }
            });
        }
    </script>
</html>

自定义指定的生命周期

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript" src="js/vue.js" ></script>
    </head>
    <body>
        <div id="box">
            <span v-color="red">自定义指定01</span>
            <span v-color="blue">自定义指定02</span>
            <span v-color="yellow">自定义指定03</span>
            <br />
            <input type="button" value="将红色更换成绿色,不会执行bind方法" @click="change" />
        </div>
    </body>
    <script>
        window.onload=function(){
            Vue.directive('color',{
                bind:function(color) {
                    //第一次绑定到DOM元素上的时候触发
                    console.info("第一次绑定数据时触发了")
                },
                update: function(color) {
                    //console.info("更新渲染数据");
                    this.el.style.color = color;
                },
                unbind: function() {
                    console.info("解绑了");
                }
            });
            var vm = new Vue({
                el: '#box',
                data: {
                    msg: 'welcome',
                    red: 'red',
                    blue: 'blue',
                    yellow: 'yellow'
                },
                methods: {
                    change: function(){
                        this.red = 'green';
                    }
                }
            });
        }
    </script>
</html>

自定义指定的生命周期

当我们再次点击按钮时候,上面红色字体会变成绿色,bind方法不会再执行。

自定义指定 — 拖拽效果

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript" src="js/vue.js" ></script>
    </head>
    <body>
        <div id="box">
            <div v-drag :style="{width:'100px', height:'100px', background:'blue', position:'absolute', right:0, top:0}"></div>
            <div v-drag :style="{width:'100px', height:'100px', background:'red', position:'absolute', left:0, top:0}"></div>
        </div>
    </body>
    <script>
        window.onload=function(){
            Vue.directive('drag',function(){
                var oDiv = this.el;
                oDiv.onmousedown = function(ev){
                    var disX = ev.clientX - oDiv.offsetLeft;
                    var disY = ev.clientY - oDiv.offsetTop;
                    document.onmousemove = function(ev) {
                        var l = ev.clientX - disX;
                        var t = ev.clientY - disY;
                        oDiv.style.left = l + 'px';
                        oDiv.style.top = t + 'px';
                    }
                    document.onmouseup=function(){
                        document.onmousemove=null;
                        document.onmouseup=null;
                    };
                }
            });
            var vm = new Vue({
                el: '#box',
                data: {
                    msg: 'welcome'
                }
            });
        }
    </script>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值