【溯源篇】从头看vue(五)——自定义指令

news/2024/7/10 2:29:11 标签: vue

视频学习地址:https://www.bilibili.com/video/BV1mz4y127UG?p=13

自定义指令

除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令。注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件。然而,有的情况下,你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令

比如聚焦输入框的例子,当页面加载时,该元素将获得焦点:

// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
  // el就是我们绑定此指令是的元素对象;inserted为钩子函数,下期会讲;
  // el.focus()相当于:document.getElementById("***").focus();
  inserted: function (el) {
    el.focus()
  }
})

然后你可以在模板中任何元素上使用新的 v-focus。如果想注册局部指令,组件中也接受一个 directives 的选项:

directives: {
  focus: {
    // 指令的定义
    inserted: function (el) {
      el.focus()
    }
  }
}

前后对比:

在这里插入图片描述
在这里插入图片描述

官方文档地址:
https://cn.vuejs.org/v2/guide/custom-directive.html

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style type="text/css">
        .bgcolor{
            background: #c5c551;
            padding: 20px;
            width: 100%;
            height: 200px;
            text-align: center;
            display: flex;
            flex-direction:column;
            justify-content: center;
            align-items: center;
        }
    </style>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" type="text/javascript" charset="UTF-8"></script>
</head>
<body>
    <template id="multiplication">
        <div>
            <input v-focus2 type="text" v-model="multiplierA" />
            <input v-focus type="text" v-model="multiplierB">
            <button @click="result = multiplierA*multiplierB">The anwser is {{ result }}</button>
        </div>
    </template>
    <div class="bgcolor" id="app">
        <div>
            <do-multiplication></do-multiplication>
        </div>
    </div>
</body>
<script type="text/javascript">
    Vue.component("doMultiplication",{
        data:function(){
            return{
                multiplierA: 0,
                multiplierB: 0,
                result: 0
            }
        },
        // 局部指令
        directives:{
            focus2:{
                inserted: function(el){
                    el.focus();
                }
            }
        },
        template: "#multiplication"
    })

	// 全局指令
    Vue.directive('focus',{
        inserted:function(el){
            el.focus();
        }
    })
    var vm = new Vue({
        el: '#app',
        // 数据
        data:{}
    });
</script>
</html>


http://www.niftyadmin.cn/n/1486207.html

相关文章

手机秘籍

1、当不喜欢别人打搅自己的时候&#xff0c;又不想关机&#xff0c;给大家一个办法&#xff0c;使自己的号码变成空号。 输入 **21*999999# &#xff0c;按打电话时候的拨出键 。当别人拨打你的电话时候就你的号码就变成空号了。再输入 ##21#&#xff0c;在按拨出键 又正…

django基本步骤

1.django-admin startproject <sitename>(在Script下) 2.python manage.py startapp <name> 3.修改app目录下的views.py,加入响应函数 在app目录下新建文件夹templates,放html 4.way1&#xff1a;修改工程目录urls.py&#xff0c;添加响应函数与url对应关系(引入vi…

【溯源篇】从头看vue(六)——自定义指令之钩子函数(超详细超多示例!!)

自定义指令中的钩子函数 一个指令定义对象可以提供如下几个钩子函数 (均为可选)&#xff1a; bind&#xff1a;只调用一次&#xff0c;指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。 inserted&#xff1a;被绑定元素插入父节点时调用 (仅保证父节点存在&a…

模版引擎XTemplate与代码生成器XCoder(源码)

为什么80%的码农都做不了架构师&#xff1f;>>> 模版引擎XTemplate是一个仿T4设计的引擎&#xff0c;功能上基本与T4一致&#xff08;模版语法上完全兼容T4&#xff0c;模版头指令部分兼容&#xff09;。 自己设计模版引擎&#xff0c;就是为了代码生成器、网站模版…

如何确定所打Patch是否需要停机

Oracle在11g中提出了online patching(也可以叫做hot patch)的概念&#xff0c;有效减少了因实施one-off patch而导致的系统停机时间。但我们如何得知哪些Patch是可以online apply的&#xff0c;而哪些Patch是必须关闭实例(shutdown instance)后应用的呢&#xff1f; 下面我们就…

【溯源篇】从头看vue(七)——过滤器基础

官方文档&#xff1a;https://cn.vuejs.org/v2/guide/filters.html#ad 过滤器 自定义过滤器&#xff0c;可被用于一些常见的文本格式化。注意全局定义过滤器要在创建 Vue 实例之前。 Vue.filter(capital, function(val){value val.toString()return value.charAt(0).toUpperC…

深度工作:充分使用每一份脑力

</div><!--end: blogTitle 博客的标题和副标题 --> <div class"postBody"> <div id"cnblogs_post_body" class"blogpost-body cnblogs-markdown"><p>浮躁已经成了普遍的社会现象。判断一个人是否浮躁非常容…

VSCode生成HTML格式快捷方式

方法一&#xff1a;英文状态输入&#xff01;&#xff0c;然后按回车; 方法二&#xff1a; 输入html&#xff0c;在出来的提示中选择html:5;