Vue中的指令与自定义指令

15409007:

目录

Vue中的指令

v-xxx指令汇总

v-text

 v-html

v-cloak

v-once

 v-pre

 自定义指令

函数式

对象式


Vue中的指令

v-xxx指令汇总

之前学过的指定:

v-bind :单向绑定解析表达式,可简写为:xxx

v-model :双向数据绑定

v-for  :遍历数组、对象、字符串等

v-on  :绑定事件监听,可简写为@

v-if    :条件渲染(动态控制结点是否存在)

v-else   :条件渲染(动态控制结点是否存在)

v-show  :条件渲染(动态控制结点是否展示)

v-text 指令:向其所在的结点中渲染文本内容,与插值值的区别是,v-text会替换掉结点中的内容

v-html指令 :向其所在的结点中渲染文本内容,可以识别html语法,注:v-html存在安全性问题,在网站上动态渲染任意html是有危险的,容易导致xss攻击,尽量不要在用户的输入框使用v-html。

v-cloak指令(没有值):本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性,配合cssv-cloak可以解决网速慢时页面展示出{ {xxx}}的问题

v-once指令:v-once所在的结点在初次动态渲染后,就视为静态内容了。以后数据的改变不会引起v-once所在的结构更新。

v-pre指令:跳过器所在结店的编译,可利用他跳过没有使用指令语法、没有使用差值语法的街第三,vue不会解析他,直接使用到页面,加快编译

v-text

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--vue-->
    <script src="https://cdn.staticfile.org/vue/2.7.0/vue.min.js"></script>

</head>

<div id="root">
插值语法:<div>{
   
   {name}}</div>
v-text指令:<div v-text="name"></div>
v-text指令:<div v-text="name">abc</div>
</div>
<script type="text/javascript">
    const vm = new Vue({
        el: '#root',
        data: {
            name:'hello'
        }
    });
    console.log(vm)

</script>

 v-html

<div id="root">
v-text:<p v-text="name"></p>
v-text:<p v-text="htmlName"></p>
v-html:<p v-html="htmlName">你好</p>
</div>


<script type="text/javascript">
    const vm = new Vue({
        el: '#root',
        data: {
            name:'世界杯',
            htmlName:'<h2>世界杯2</h2>'
        }

    });
</script>

v-cloak

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--vue-->
    <script src="https://cdn.staticfile.org/vue/2.7.0/vue.min.js"></script>

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

<div id="root">
<div v-cloak>{
   
   {name}}</div>
</div>

v-once


<div id="root">
<div v-once>初始的n值为:{
   
   {n}}</div>
<div>之后的n值为:{
   
   {n}}</div>
    <button @click="n++">n++</button>
</div>


<script type="text/javascript">
    const vm = new Vue({
        el: '#root',
        data: {
            n:10,
        },
        methods: {}

    });
    console.log(vm)

</script>

 v-pre


<div id="root">
<div>{
   
   {cool}}</div>
<div v-pre>{
   
   {cool}}</div>
</div>


<script type="text/javascript">
    const vm = new Vue({
        el: '#root',
        data: {
            cool:'天气只有十来度'
        },

    });

</script>

 自定义指令

函数式

定义一个v-big指令,和v-text功能类似,但会吧绑定的数值放大10倍

</head>

<div id="root">
    <div v-text="n" ></div>
    <div v-big="n"></div>
    <button @click="n++">n++</button>
</div>


<script type="text/javascript">
    const vm = new Vue({
        el: '#root',
        data: {
            n:1,
        },
        directives:{
            big(element,binding) {
                element.innerText=binding.value*100
            }
        }
    });
    console.log(vm)

</script>

对象式

需求:定义个v-fousbind指令,和v-bind功能类式,但可以让其所绑定的inout元素默认获取焦点


<div id="root">
    <div>n的值为:{
   
   {n}}</div>
<input type="text" v-fousbind="n" value="n"></input>
<button @click="n++">n++按钮</button>
</div>


<script type="text/javascript">
    const vm = new Vue({
        el: '#root',
        data: {
            n:1
        },
        directives:{
            fousbind:{
                //指令与元素成功绑定时(一上来)
                bind(element,binding){
                    element.value=binding.value
                },
                //指令所在元素被插入页面时
                inserted(element,binding){
                    element.focus()
                },
                //指令所在的模版被重新解析时
                update(element,binding){
                    element.value=binding.value
                    element.focus()
                }
            }
        }

    });
    console.log(vm)

</script>

猜你喜欢

转载自blog.csdn.net/weixin_60719453/article/details/131119801