vue指令、自定义指令

一.什么是指令?

1.vue中内置的指令

在vue中提供了一些基础的指令,方便我们直接操作操作DOM节点,主要的内置指令有:

v-cloak:用于在数据还没插入到标签时,不显示原始文本,需要添加样式 .

 <style>
        [v-cloak]{
            display: none;
        }
</style>


 <span v-cloak>{{mess}}</span>

v-text:用于将数据填充到标签中,但是不会出现闪动问题,类似插值和v-cloak的效果.

//这两个效果一样
  <span v-text='mess'></span
  <span v-cloak>{{mess}}</span>

v-html:用于将HTML片段填充到标签中,可以解析HTML标签.

<p v-html="message"></p>
...
message:`<span>this is a message</span>`,

效果:在这里插入图片描述
v-pre:用于显示原始信息.

 <p v-pre>{{message}}</p>

效果:
在这里插入图片描述
v-once:只渲染一次,后面元素中的数据变化时,都不会重新渲染.
v-for:用于遍历,类似于for …in…遍历

 <li v-for="(item,index) in items" :key="index">{{item}}</li>
 ...
 items:[1,2,3,4],

v-on:用于监听DOM事件.并触发绑定的javascript代码,简写为@.

 <button v-on:click>登录</button>
 <button @:click>登录</button>

v-bind:用于属性绑定,将属性动态和数据绑定.
v-model:实现表单数据和Model中的数据双向绑定.
v-if 、v-else-if、v-els:用于条件渲染,根据条件选择DOM节点显示.
v-show & v-if:用于显示和隐藏元素.
区别:
v-if:每次元素都会重新删除和创建,条件为false时,不会出现在DOM树上.
v-show:不会删除和创建,只是设置display:none样式.

2.vue自定义指令

除了核心的指令,Vue也允许注册自定义指令,在需要对DOM底层进行操作,这时候就会用到自定义指令.自定义指令包括全局自定义指令和局部指令.

二.自定义指令的用法

自定义指令语法:

 Vue.directive('Directive_Name',{Hook_Function:callback(el,binding)})
  • Directive_Name:自定义指令的名称(约定全小写),不需要加v-,使用时需要添加v-

  • Hook_Function 钩子函数
    可选参数:
    bind:当指令绑定到元素上时,就会执行该函数,执行一次; 此时元素还未插入到 DOM 中去。
    一般执行样式相关的操作。
    inserted:被绑定元素插入父节点时会调用该函数,执行一次。
    一般执行 JS 行为相关的操作。
    update当 vnode 更新时执行该函数,可能执行多次。

  • el 用来绑定指令的元素,是一个原生 DOM 对象。

  • binding 记录自定义指令信息的对象,包含许多属性,例如
    name 指令名,没有 v- 前缀。
    value 指令的绑定值(表达式计算完成后的值)。
    expression 指令绑定值的字符串形式(原样)。

注册一个v-focus指令,实现在页面加载完成后,输入框自动获取焦点.
全局自定义指令

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>全局自定义指令</title>
</head>

<body>
    <div id="app">
        <input type="text" name="" id="" v-focus>
    </div>
    <script src="https://unpkg.com/vue/dist/vue.min.js"></script>
    <script>
        //全局注册一个自定义指令:v-focus
        Vue.directive('focus', {
            inserted: function (el) {
                el.focus()
            }
        })
        const vm = new Vue({
            el: '#app',
        })

    </script>
</body>

</html>

自定义局部指令:

<template>
  <div>
      <input type="text" name="" id="" v-focus>
  </div>
</template>
<script>
export default {
    name:'Directive',
    directives:{
        focus:{
            inserted:function(el){
                el.focus()
            }
        }
    }
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值