Vue——day10之指令

news2024/9/22 15:32:20

目录

内置指令

v-text指令

v-html指令

v-cloak指令

v-once指令

v-pre指令

整体代码示例

自定义指令

整体代码演示

总结


内置指令

v-text指令

        v-text指令是Vue.js中的一种指令,它用于将元素的textContent设置为指定的值。它的使用方式是在元素上添加v-text属性,并将其值设置为Vue实例中的一个变量或表达式。

        例如,假设Vue实例有一个名为message的变量:

new Vue({
  data: {
    message: 'Hello world!'
  }
})

        然后可以在HTML中使用v-text指令将message的值显示在元素中:

<div v-text="message"></div>

        这样,当页面加载时,元素的textContent会被设置为'Hello world!'。如果message的值发生变化,元素的内容也会自动更新。相比起使用双花括号插值语法{{}}, v-text指令更适合用于在元素中显示简单的文本内容。


v-html指令

        v-html指令是Vue.js中的一种指令,用于将元素的innerHTML设置为指定的HTML内容。它的使用方式与v-text指令类似,只需在元素上添加v-html属性,并将其值设置为Vue实例中的一个变量或表达式。

        例如,假设Vue实例有一个名为htmlContent的变量:

new Vue({
  data: {
    htmlContent: '<span style="color:red;">Hello world!</span>'
  }
})

        然后可以在HTML中使用v-html指令将htmlContent的值作为HTML内容显示在元素中:

<div v-html="htmlContent"></div>

        当页面加载时,元素的innerHTML会被设置为'<span style="color:red;">Hello world!</span>',从而正确渲染出红色的“Hello world!”文本。需要注意的是,使用v-html指令时要确保内容是可信的,以避免XSS攻击。只应该使用可信的HTML内容来渲染,而不是用户输入的内容。


v-cloak指令

        v-cloak是Vue.js提供的一个指令,用于在Vue实例渲染完成之前隐藏绑定元素。在页面加载过程中,由于Vue实例需要进行渲染和解析,有时候会导致用户在浏览器中看到未渲染的Vue模板或表达式。v-cloak指令可以用来解决这个问题。

        使用v-cloak指令的方法是在需要隐藏的元素上添加v-cloak属性,然后在CSS中定义v-cloak伪类选择器来控制元素的显示与隐藏。例如:

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

<div v-cloak>
  <!-- Vue模板或表达式 -->
</div>

        上面的代码中,[v-cloak]选择器会在Vue实例渲染完成之前将具有v-cloak属性的元素隐藏起来。渲染完成后,Vue会自动移除v-cloak属性,元素会恢复显示。

        需要注意的是,v-cloak指令必须和CSS配合使用,才能隐藏元素。在没有定义v-cloak样式的情况下,即使添加了v-cloak属性,元素也不会被隐藏。


v-once指令

        v-once指令是Vue.js中的一个指令,它用于标记元素或组件的一部分内容只需要渲染一次。一旦这部分内容被渲染,任何后续的数据变化将不会更新它。

使用v-once指令有两个主要的优点:

  1. 提高性能:当有一些静态的内容,不需要被重新渲染时,可以使用v-once指令,减少不必要的性能开销。

  2. 避免无限循环更新:有时候,在Vue.js的模板中可能会出现无限循环更新的问题。通过使用v-once指令,可以阻止这种无限循环更新的情况发生。

使用v-once指令很简单,只需要在需要渲染一次的元素或组件上添加v-once指令即可。例如:

<template>
  <div>
    <h1 v-once>{{ title }}</h1>
    <p>This content will not be updated</p>
  </div>
</template>

        在上面的例子中,<h1>元素使用了v-once指令来标记,因此它只会渲染一次。即使title数据发生变化,<h1>元素的内容也不会被更新。而<p>元素没有使用v-once指令,因此它的内容会随着数据变化而更新。


v-pre指令

        v-pre指令是Vue.js的一个指令,用于在模板中以原始的方式显示文本内容,而不将其解析为Vue的模板语法。v-pre指令可以用于提高性能,特别是在大型的、复杂的模板中,可以避免Vue对文本内容进行解析和编译过程。

使用v-pre指令的方式如下:

<template>
  <div v-pre>
    {{ message }}
  </div>
</template>

        在上述例子中,div元素中的内容将以原始的方式显示,而不会进行Vue的模板解析。这对于一些静态的文本内容或者作为占位符的文本非常有用,可以提高渲染的速度。

        需要注意的是,v-pre指令只会影响到当前元素及其子元素,不会影响其它元素。同时,v-pre指令也不能在自定义组件上使用。


整体代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>v-text指令</title>

    <script type="text/javascript" src="../js/vue.js"></script>

    <style>
        [v-cloak]{
            /* v-cloak:加了这个样式让带v-cloak的标签在vue被渲染之后就会显现
            防止网络问题导致未经解析的模版被现实 */
            display: none;
        }
    </style>
</head>
</head>
<body>


    <div id="root">
        <div>{{name}}</div>
        <div v-text="name">即将被替代</div>
        <div v-html="str">即将被替代</div>
        <!-- v-cloak:会在vue实例渲染的同时此标签会被去掉 -->
        <h2 v-cloak>{{name}}</h2>

        <h2 v-once>初始化的n值是:{{n}}</h2>
        <h2>当前的n值是:{{n}}</h2>
        <button @click="n++">点我n加一</button>

        <br>
        <hr>
        <br>


        <h2 v-pre>学习其实很简单</h2>
        <h2>当前的n值是:{{n}}</h2>
        <button @click="n++">点我n加一</button>
    </div>
    
</body>

<script type="text/javascript">
    Vue.config.productionTip=false
    new Vue({
        el:'#root',
        data:{
            name:'WJG',
            str:'<h3>我是一个h3标签</h3>',
            n:1
        }
    });
</script>
</html>

 页面效果


自定义指令

        在Vue.js中,可以使用自定义指令来扩展Vue的功能。自定义指令是一种特殊的Vue功能,允许我们直接与DOM元素进行交互。

下面是一个示例,展示了如何在Vue中创建一个自定义指令:

<template>
  <div>
    <input v-focus />
  </div>
</template>

<script>
export default {
  directives: {
    focus: {
      // 指令的定义
      inserted: function (el) {
        // 指令被插入到DOM元素时触发
        el.focus();
      }
    }
  }
}
</script>

        上述代码中,我们通过directives属性定义了一个名为focus的自定义指令。在指令的定义中,我们可以使用一些生命周期钩子函数来处理指令的行为,如inserted函数。在我们的示例中,当指令被插入到DOM元素时,会触发inserted函数,并将DOM元素作为参数传递给函数。在inserted函数中,我们可以执行一些操作来实现具体的功能,比如在插入元素后自动聚焦到输入框。

        然后,我们在模板中使用自定义指令v-focus来应用该指令。在上述示例中,我们将自定义指令应用于一个输入框元素,这样在页面加载后该输入框就会自动获取焦点。

        除了inserted生命周期钩子函数,还有其他一些生命周期钩子函数可以在指令中使用,用于处理不同的操作,如bindupdate等。

        通过自定义指令,我们可以扩展Vue的功能,实现一些特定的交互效果或行为。


整体代码演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>

    <script type="text/javascript" src="../js/vue.js"></script>
</head>
</head>
<body>


    <div id="root">
        <h2>当前的n值是:<span v-text="n"></span></h2>
        <h2>放大十倍后的n值是:<span v-big="n"></span></h2>
        <button @click="n++">点我n加一</button>

        <hr>
        <input type="text" v-fbind:value="n">


    </div>
    
</body>

<script type="text/javascript">
    Vue.config.productionTip=false
    new Vue({
        el:'#root',
        data:{
            n:1
        },
        directives:{
            // 调用时机
            // 1.指令与元素成功绑定时
            // 2.指令所在的模版被重新解析时
            big(element,binding){
                element.innerText = binding.value*10
            },
            fbind:{
                // 指令与元素成功绑定时
                bind(element,binding){
                    element.value = binding.value
                },
                // 指令所在元素被插入页面时被调用
                inserted(element,binding){
                    element.focus()
                },
                // 指令所在模版被重新解释时调用
                update(element,binding){
                    element.focus()
                    element.value = binding.value
                }
            }
        }
    });
</script>
</html>

页面效果展示


总结

我们学过的指令:

  • v-bind:单向绑定解析表达式,可简写为 :XXX
  • v-model:双向数据绑定
  • v-for:遍历数组/对象/字符串
  • v-on:绑定事件监听,可简写为 @
  • v-if:条件渲染(动态控制节点是否存在)
  • v-else:条件渲染(动态控制节点是否存在)
  • v-show:条件渲染(动态控制节点是否展示)
  • v-text 指令:
    • 作用:向其所在的节点中渲染文本内容。
    • 与插值语法的区别:v-text 会替换掉节点中的内容,{{xx}} 则不会。
  • v-cloak 指令(没有值):
    • 本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删除 v-cloak 属性。
    • 使用CSS配合 v-cloak 可以解决网速慢时页面展示出 {{xxx}} 的问题。
  • v-once 指令:
    • 所在节点在初次动态渲染后就视为静态内容了。
    • 以后数据的改变不会引起 v-once 所在结构的更新,可用于优化性能。
  • v-pre 指令:
    • 跳过所在节点的编译过程。
    • 可以利用它跳过没有使用指令语法、没有使用插值语法的节点,以加快编译速度。

自定义指令总结:

  • 定义语法:
    • 局部指令:在组件的 directives 选项中定义。
    • 全局指令:使用 Vue.directive 方法全局注册。
  • 配置对象中常用的3个回调:
    • bind:指令与元素成功绑定时调用。
    • inserted:指令所在元素被插入页面时调用。
    • update:指令所在模板结构被重新解析时调用。
  • 备注:
    • 指令定义时不加 v-,但使用时要加 v-
    • 指令名如果是多个单词,要使用 kebab-case 命名方式,不要用 camelCase 命名。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2111219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript( 简介)

目录 含义 实例 js代码位置 1 外部引入js文件 2 在 HTML 中&#xff0c;JavaScript 代码必须位于 标签之间。 小结 含义 js是一门脚本语言&#xff0c;能够改变HTML内容 实例 getElementById() 是多个 JavaScript HTML 方法之一。 本例使用该方法来“查找” id"d…

大数据 - 行式存储与列式存储

为什么要区分&#xff1f; 大多数数据库系统存储一组数据记录&#xff0c;这些记录由表中的列和行组成。表可以水平分区&#xff08;将属于同一行的值存储在一起&#xff09;&#xff0c;也可以垂直分区&#xff08;将属于同一列的值存储在一起&#xff09;。 数据库用于存储、…

zdppy+vue3+onlyoffice文档管理系统实战 20240906 上课笔记 整合权限校验中间件

基于角色方法的中间件基本用法 import zdppy_api as api import zdppy_apimidauthasync def index(request):return api.resp.success()async def login(request):token zdppy_apimidauth.get_role_token(role"admin")return api.resp.success(token)auth_dict {&…

单例模式的总结

常规模式:有属性/构造方法/普通方法,也可以在类中执行主方法,也可以在test类中执行主方法 单例模式是什么? 单例模式:类只有1个对象;保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式是在内存中 仅会创建一次对象 的设计模式特点: 成员是 私有的静态的 构…

手机扬声器音量总是不够大?试试“扬声器助推器”吧

手机的扬声器音量总是不够大&#xff0c;尤其是在嘈杂的环境中&#xff0c;音乐和视频的声音总是不太清晰。直到我发现了这款“扬声器助推器”&#xff0c;我的手机音质瞬间提升了好几个档次。 软件简介&#xff1a; “扬声器助推器”利用先进的音频处理技术&#xff0c;能够…

中国各银行流动性比例数据(2000-2022年)

介绍中国银行业2000年至2022年间的流动性比例数据&#xff0c;涵盖500多家银行&#xff0c;包括城市商业银行、城镇银行、大型商业银行、股份制银行、民营银行、农村合作银行、农村商业银行、农村信用社等。这些数据对于理解中国银行业的流动性状况至关重要&#xff0c;有助于投…

ansible+awx搭建

1、环境介绍 操作系统版本&#xff1a;龙蜥os 8.9 docker 版本&#xff1a;26.0.2 python版本&#xff1a;3.11.9 ansible版本&#xff1a;2.16.6 awx版本&#xff1a;24.2.0 2、安装docker 设置软件源 yum install -y yum-utilsyum-config-manager \--add-repo \https://mirr…

【生日视频制作】长腿美女模特坐在椅子上打招呼大屏幕AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程长腿美女模特坐在椅子上打招呼大屏幕文字AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】长腿美女模特坐在椅子上打招呼大屏幕AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装A…

Google play最新政策更新和重要提醒

我们都知道&#xff0c;谷歌会定期更新其政策&#xff0c;而政策的变更通常对开发者及其团队的要求会更为严格&#xff0c;也会增加应用上架的一些限制条件&#xff0c;以此提高应用在谷歌商店的质量。 一起来看看Google play最近的一些政策更新和需要注意的地方。 新政策要求 …

2024高教社杯全国大学生数学建模竞赛C题精美可视化(python代码)

2024高教社杯全国大学生数学建模竞赛C题原创python代码 C题题目&#xff1a;农作物的种植策略 先给大家看看图吧&#xff1a; #描述性统计分析 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from scipy.stats import kurt…

DWPD指标:为何不再适用于大容量SSD?

固态硬盘&#xff08;Solid State Drives, SSD&#xff09;作为计算机行业中最具革命性的技术之一&#xff0c;凭借其更快的读写速度、增强的耐用性和能效&#xff0c;已经成为大多数用户的首选存储方案。然而&#xff0c;如同任何其他技术一样&#xff0c;SSD也面临自身的挑战…

vite创建的vue项目怎么使用jsx来实现elementPlus表格表尾的合计有多行大的方法

vite创建的vue3项目安装vitejs/plugin-vue-jsx 先附上代码效果 npm i vitejs/plugin-vue-jsx -D 注意&#xff1a;vite的版本不同请安装不同版本的 /plugin-vue-jsx 我创建项目的vite版本是 4.3.9 所以我就按照了 3.0.2版本的vitejs/plugin-vue-jsx 安装完后需要在 vite.con…

牛客刷题之JZ31.栈的压入、弹出序列(C++)

1.题目解析 本题给出两个序列&#xff0c;判断一个序列压入栈后的弹出序列是否有可能成为另一个序列&#xff0c;核心难度就是如何判断能否满足弹出序列 2.算法原理 这里的算法思路是讲压入栈的序列模拟弹出&#xff0c;即将压入的序列与弹出的序列对比&#xff0c;相同则将压入…

7、关于LoFTR

7、关于LoFTR LoFTR论文链接&#xff1a;LoFTR LoFTR的提出&#xff0c;是将Transformer模型的注意力机制在特征匹配方向的应用&#xff0c;Transformer的提取特征的机制&#xff0c;在自身进行&#xff0c;本文提出可以的两张图像之间进行特征计算&#xff0c;非常适合进行特…

GAMES101(5~6节,光栅化)

光栅化Rasterization 透视投影已知field和近平面&#xff0c;如何推导宽度&#xff1f; 根据三角函数&#xff1a;tan field / 2 (height / 2) / ||n||近平面&#xff0c;从而可以求出高度 因为知道宽高比&#xff0c;所以可以求出宽度&#xff0c;高度 * 宽/高 视口变换 …

Vulkan描述符、描述符Pool、Layout概念

1、DescriptorSetLayout为了组织和管理着色器资源&#xff08;如缓冲区、纹理、采样器等&#xff09;&#xff0c;多个相同类型的Descriptor放在一个Layout中以优化GPU对资源的访问 //DescriptorSetLayout定义了哪些描述符Descriptor类型&#xff08;Buffers、Textures、Sample…

四、搭建网站服务器超详细步骤——解决宝塔界面无法登录问题

前言 本篇博客是搭建网站服务器的第四期&#xff0c;也到了中间的一节 先分享一下我在搭建网站时的个人感受&#xff0c;我在这个环节卡住了很久 后来突然醒悟了&#xff0c;然后成功进入了宝塔界面 现在就来分享一下&#xff0c;我所遇到的问题 小伙伴们坐好了 …

LINUX和Windows提权前信息收集的两种方式

信息收集分为两种方式&#xff1a; 手动收集、自动收集&#xff1b; 手动枚举一个系统非常耗时&#xff0c;然而这种方法允许更多的控制&#xff0c;并可以帮助识别自动化工具经常遗漏的更奇特的提权提升方式&#xff1b; 一、手动收集 1、枚举用户 Windows whoami …

【C++】手动实现nique_ptr智能指针

1、自己实现封装了一个智能指针&#xff0c;并且使用了模板 目录 代码实现&#xff1a; 输出结果如下&#xff1a; 代码实现&#xff1a; #include <iostream>using namespace std;template <typename T> class UniquePtr { private:T *ptr;public://默认构造函…

【2024数学建模国赛赛题思路】C题第四套思路已出丨仅供参考

问题一思路分析 假定各种农作物未来的预期销售量、种植成本、亩产量和销售价格相对于2023年保持稳定&#xff0c;每季种植的农作物在当季销售。如果某种作物每季的总产量超过相应的预期销售量&#xff0c;超过部分不能正常销售。请针对以下两种情况&#xff0c;分别给出该乡村…