四、vue基础-指令(一)、vscode代码片段

news2024/11/9 5:02:33

一、vscode代码片段

  • 我们在前面联系Vue的过程中,有些代码片段是需要经常写的,我们再VSCode中我们可以生成一个代码片段,方便我们快速生成。
  • VSCode中的代码片段有固定的格式,所以我们一般会借助于一个在线工具来完成。

具体步骤如下:

  1. 第一步,复制自己需要生成代码片段的代码;
  2. 第二步,https://snippet-generator.app/在该网站中生成代码片段;
  3. 第三步,复制第二步生成的代码,在vscode-首选项-配置用户代码在VSCode中配置代码片段,选择html后把第二步生成的代码粘贴进去保存; 

这样子我们是不是就可以直接快速生成代码片段了嘛。 

二、Mustache双大括号语法(插值语法/胡子语法)

 如果我们希望把数据新鲜事到模板(template)中,使用最多的语法是”Mustache“语法(双大括号)的文本插值。

  • 并且我们前面提到过,data返回的对象是有添加到Vue的响应式系统中;
  • 当data中的数据发生改变时,对应的内容也会发生更新。
  • 当然,Mustache中不仅仅可以是data中的属性,也可以是一个JavaScript的表达式

我们看下具体有哪些使用场景: 

<!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>
  </head>
  <body>
    <div id="app">
      <!-- 1. 基本使用 -->
      <h2>{{ message }}</h2>
      <h2>当前计数: {{ counter }}</h2>

      <!-- 2. 表达式 -->
      <h2>计数双倍: {{ counter * 2 }}</h2>
      <h2>展示的信息: {{ info.split(' ') }}</h2>

      <!-- 3. 三元运算符 -->
      <h2>{{ age >=18? "成年人": "未成年人" }}</h2>

      <!-- 4. 调用methods中的函数 -->
      <h2>{{ formatDate() }}</h2>

      <!-- 5. 调用methods中的带参数的函数 -->
      <h2>{{ formatDate2(123) }}</h2>

      <!-- 4. 注意:这里不能定义语句 -->
      <!-- <h2>{{ const name = "why"; name }}</h2> -->
    </div>
    <script src="../lib/vue.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data: function () {
          return {
            message: 'Hello Vue',
            counter: 100,
            info: 'my name is wangdaxia',
            age: 22,
          };
        },
        methods: {
          formatDate: function () {
            return '2023-04-16';
          },
          formatDate2: function (date) {
            return '2023-04-16-' + date;
          },
        },
      });

      app.mount('#app');
    </script>
  </body>
</html>

还有一个使用场景,如果我们上述的formatDate2函数需要传一个参数,这个参数可以穿data里面的属性吗? 当然可以,我们试一下。

三、v-once指令(了解) 

我们先来个栗子🌰~

这里我设置了一个h2标签、一个button按钮。h2标签去获取message数据,button按钮绑定了点击事件,通过点击button按钮去改变message的值。

message的值是不是发生改变了?因为vue会监听message这个值,当它发生改变了,这个值会重新去渲染。

但是某些需求是希望这个message的值,只能渲染一次。

就好比上面的例子,我只希望他给我渲染一次,再去点击事件改变message的值了,我第一个h2标签的message还是第一次渲染的值。

<!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>
  </head>
  <body>
    <div id="app">
      <!-- 指令:v-once -->
      <h2>{{ message }}</h2>
      <button @click="changeMessage">改变message</button>
    </div>
    <script src="../lib/vue.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data: function () {
          return {
            message: 'Hello Vue',
          };
        },
        methods: {
          changeMessage: function () {
            this.message = '你好啊,大侠';
          },
        },
      });

      app.mount('#app');
    </script>
  </body>
</html>

所以我修改下代码,再去点击button按钮,看看message的值是否会发生变化,咱们看下效果:

是不是不会点了,因为message第一次渲染的时候,值就是Hello Vue。  

 其实值是发生改变了,只不过界面上没有发生改变。我们把message打印出来看一下。

 而且如果绑定v-once的标签里面还有子组件,都只会渲染一次。比如例如下面这个例子。

 


 那我们再新增一个h1标签,里面写message的话,这里的message只会渲染一次吗?很明显不是的,因为他不是上面设置了v-once的子组件。

四、 v-text指令(了解)

 用于更新元素的 textContent。

上面我们想把message引用到上面,我们使用的是插值语法。

 除了插值语法我们还有其他方法。我们给h2添加一个指令v-text。实现效果都是一样的。

<!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>
  </head>
  <body>
    <div id="app">
      <h2>{{message}}</h2>

      <h2 v-text="message"></h2>
    </div>
    <script src="../lib/vue.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data: function () {
          return {
            message: 'Hello Vue',
          };
        },
      });

      app.mount('#app');
    </script>
  </body>
</html>

 只是插值语法更为灵活一点,因为我们可以写一些别的东西和message混在一起。那如果我们在v-text里面写一些东西,v-text绑定的message会把aaa给替换掉。

<h2> aa {{ message }} bbb</h2>

 我们看下效果:

五、v-html

content是一个html标签,那我将content放到上面的h2标签里,他会自动渲染成span标签以及相对应的style吗?很明显不会。

<!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>
  </head>
  <body>
    <div id="app">
      <h2>{{ content }}</h2>
    </div>
    <script src="../lib/vue.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data: function () {
          return {
            content: '<span style="color: red; font-size: 30px;">哈哈哈</span>',
          };
        },
      });

      app.mount('#app');
    </script>
  </body>
</html>

我们使用v-html试试看:

  

 六、v-pre

这里我单纯只是想展示两个大括号{{}},我该怎么去做?

 是的,添加v-pre:

七、v-cloak

我们如果把下面创建app和挂载这个步骤去掉,我们在页面上看h2标签是不是展示成这样子?

因为没有渲染嘛。那此时我把创建app和挂载这2个步骤放在你一个setTimeout里面,设置3秒后才会执行里面的代码。 

<!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>
  </head>
  <body>
    <div id="app">
      <h2>{{message}}</h2>
    </div>
    <script src="../lib/vue.js"></script>

    <script>
      setTimeout(() => {
        const app = Vue.createApp({
          // data: option api
          data: function () {
            return {
              message: 'Hello Vue',
            };
          },
        });

        app.mount('#app');
      }, 3000);
    </script>
  </body>
</html>

通过html页面展示,我们不难发现,页面一开始由 {{message}} 变成 Hello Vue。

其实我们就是实际使用过程中,可能会因为网络环境等因素,使用者一开始看到的是没渲染过的{{message}},那我们怎么去避免呢?我们可以加上一个斗篷 v-cloak。意思就是我们先把内容遮起来,遮起来之后慢慢渲染,渲染成功过后我们就把斗篷移除掉,这样子展示给客户面前的就是渲染过后的内容。

我们加上斗篷之后,发现为啥效果还是跟没加是一样的。

因为需要配合上面的这几行代码一起使用。

 我们需要添加css属性,当有斗篷的时候,display=none,当渲染成功之后,vue会自动将h2上面的v-cloak删掉, 删掉之后,上面的style就不会对h2起效果了。

应该能理解吧~

 

八、v-memo

我们直接来个例子🌰~

<!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>
  </head>
  <body>
    <div id="app">
      <div>
        <h2>姓名: {{ name }}</h2>
        <h2>年龄: {{ age }}</h2>
        <h2>身高: {{ height }}</h2>
      </div>
      <button @click="updateInfo">改变信息</button>
    </div>

    <script src="../lib/vue.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data: function () {
          return {
            name: 'daxia',
            age: 18,
            height: 1.88,
          };
        },
        methods: {
          updateInfo: function () {
            this.name = 'kobe';
          },
        },
      });

      app.mount('#app');
    </script>
  </body>
</html>

 

题目:现在来个新的需求, 只有当name发生改变的时候,才需要进行重新渲染。其他字段(age和height)发生改变时,不需要进行重新渲染。

 我们看下官方文档:

 直接上代码:

只有当name和最后一次渲染的不同,才会进行渲染,否则都是跳过渲染。

<!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>
  </head>
  <body>
    <div id="app">
      <div v-memo="[name]">
        <h2>姓名: {{ name }}</h2>
        <h2>年龄: {{ age }}</h2>
        <h2>身高: {{ height }}</h2>
      </div>
      <button @click="updateInfo">改变信息</button>
    </div>

    <script src="../lib/vue.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data: function () {
          return {
            name: 'daxia',
            age: 18,
            height: 1.88,
          };
        },
        methods: {
          updateInfo: function () {
            this.name = 'kobe';
          },
        },
      });

      app.mount('#app');
    </script>
  </body>
</html>

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

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

相关文章

01_什么是Uboot

目录 U-Boot简介 获取Uboot U-Boot初次编译 U-Boot烧写与启动 U-Boot简介 Linux系统要启动就必须需要一个bootloader程序(裸机程序),也就说芯片上电以后先运行一段bootloader程序。这段bootloader程序会先初始化DDR等外设,然后将Linux镜像从flash(NAND,NOR FLASH,SD,EMMC等…

【防止恶意用户注册】-- 手机在网状态 API 的防欺诈应用解析

简介 手机在网状态 API 支持传入手机号码&#xff0c;查询手机号在网状态&#xff0c;返回在网、在网不可用、不在网&#xff08;销号/未启用/停机&#xff09;等多种状态&#xff0c;查询手机号在网状态之后&#xff0c;可以根据具体的业务需求来进行不同的处理。 本文主要介…

EA的使用---文档的生成

EA中文档的自动生成 1.找到如下界面 2.选择第一个 3.设置存储的位置 4.点击Generate 5.查看生成的文档

ViT Vision Transformer进行猫狗分类

文章目录依赖准备数据集合残差结构PatchEmbed模块Attention模块MLPBlockVisionTransformer结构模型定义定义一个模型训练VISION TRANSFORMER简称ViT&#xff0c;是2020年提出的一种先进的视觉注意力模型&#xff0c;利用transformer及自注意力机制&#xff0c;通过一个标准图像…

【C++STL精讲】string的模拟实现

文章目录&#x1f490;专栏导读&#x1f490;文章导读&#x1f337;定义string类&#x1f337;构造函数&#x1f337;拷贝构造函数&#x1f337;赋值重载&#x1f337;析构函数&#x1f337;[]操作符重载&#x1f337;比较运算符重载&#x1f337;c_str、size、capacity&#x…

模板学堂|DataEase图表样式解析

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场&#xff08;https://dataease.io/templates/&#xff09;。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板&#xff0c;方便用户根据自身的业务需求和使用场景选择对应的仪表板模板&#xff0c;并…

「VS」Visual Studio 常用小技巧

目录指定代码不编译设置选中项目为启动项代码区显示行号新建垂直文档组生成后将dll复制到指定目录指定代码不编译 说明&#xff1a;在项目开发时&#xff0c;有时候已经将代码加入到项目中&#xff0c;但有不想要编译时可以一下操作。 文件处右键→属性→常规→从生成中排除→选…

快速解决CentOS中yum下载慢的问题(更换成阿里云)

目录1、备份自带的YUM源2、下载新的yum源3、清除旧的 yum 缓存4、更新yum缓存4、查看更换的阿里云镜像的仓库是否生效。为了下载速度快&#xff0c;每次都要做好镜像的更改&#xff0c;既然次数多&#xff0c;懒得每次还来查资料&#xff0c;就自己写一篇博客加强自己的记忆。 …

Docker环境安装

Docker环境安装Docker简介Docker工作原理Docker的应用场景Docker 的优点CentOS Docker 安装与配置Docker 安装Docker 配置Docker容器概念Docker容器操作拉取镜像删除镜像容器相关命令创建并启动容器停止和恢复容器删除容器Docker简介 Docker 是一个开源的应用容器引擎&#xf…

4年外包上岸,我只能说这类公司能不去就不去

我大学学的是计算机专业&#xff0c;毕业的时候&#xff0c;对于找工作比较迷茫&#xff0c;也不知道当时怎么想的&#xff0c;一头就扎进了一家外包公司&#xff0c;一干就是4年。现在终于跳槽到了互联网公司了&#xff0c;我想说的是&#xff0c;但凡有点机会&#xff0c;千万…

ChatGPT背后的AI背景、技术门道和商业应用(万字长文,建议收藏)

作者&#xff1a;京东科技 李俊兵 各位看官好&#xff0c;我是球神&#xff08;江湖代号&#xff09;。 自去年11月30日ChatGPT问世以来&#xff0c;迅速爆火出圈。 起初我依然以为这是和当年Transformer, Bert一样的“热点”模型&#xff0c;但是当一篇篇文章/报告不断推送…

计算机网络面试八股文攻略(二)—— TCP 与 UDP

一、基础概念 TCP 与 UDP 是活跃于 运输层 的数据传输协议 TCP&#xff1a;传输控制协议 &#xff08;Transmission Control Protocol&#xff09;–提供面向连接的&#xff0c;可靠的数据传输服务。具体来说就是一种要建立双端连接才能发送数据&#xff0c;能确保传输可靠的…

Hive DDL和DML

目录 一 DDL 1.1 数据库 1.1.1 创建数据库 1.1.2 查询数据库 1.1.3 修改数据库 1.1.4 删除数据库 1.1.5 切换当前数据库 1.2 表 1.2.1 创建表 1.2.2 查看表 1.2.3 修改表 3.2.4 删除表 3.2.5 清空表 二 DML 2.1 Load 2.2 Insert 2.2.1 将查询结果插入表中 2…

C++程序设计函数部分(定义+实例)

目录 1、内联函数 2、默认形参值函数 3、重载函数 4、系统函数 1、内联函数 &#xff08;1&#xff09;定义 在函数前面加上 inline 申明 eg&#xff1a; inline double CalArea(double radius) { return 3.14*radius*radius; } void main() { double r(3.0); dou…

后缀数组的应用:[Leetcode] 321.拼接最大数(困难)

题目描述 给定长度分别为 m 和 n 的两个数组&#xff0c;其元素由 0-9 构成&#xff0c;表示两个自然数各位上的数字。现在从这两个数组中选出 k (k < m n) 个数字拼接成一个新的数&#xff0c;要求从同一个数组中取出的数字保持其在原数组中的相对顺序。 求满足该条件的…

ChatGPT 究竟在做什么?它为何能做到这些?(1)

ChatGPT能够自动生成一些表面上看起来像人类写出的文字的东西&#xff0c;是一件很厉害且出乎大家意料的事。那么&#xff0c;它是如何做到的呢&#xff1f;又是为何能做到呢&#xff1f;我在这里想大致介绍一下ChatGPT的内部机理&#xff0c;然后探讨一下为什么它能很好地生成…

ZNS 架构实现 : 解决传统SSD问题的高性能存储栈设计

声明 主页&#xff1a;元存储的博客_CSDN博客 依公开知识及经验整理&#xff0c;如有误请留言。 个人辛苦整理&#xff0c;付费内容&#xff0c;禁止转载。 内容摘要 2.2 ZNS 的架构实现 先看看 支持zone 存储的 SMR HDD 以及 支持 zonefs 的 nvme ssd 的整个存储栈形态 其中对…

前端项目-12-个人中心-二级路由配置-导航守卫-懒加载

目录 1-个人中心 1.1-个人中心路由注册 1.2-拆分二级路由组件 1.3-动态渲染我的订单页面 2-导航守卫优化 2.1-用户未登录导航守卫优化 2.2-路由独享 2.3-组件内守卫 3-懒加载 3.1-图片懒加载 3.2-路由懒加载 4-map文件处理 1-个人中心 需求&#xff1a;当用户点击支…

计算机图形学 | 实验五:模型导入

计算机图形学 | 实验五&#xff1a;模型导入计算机图形学 | 实验五&#xff1a;模型导入模型加载库AssimpAssimp简介Assimp构建Mesh && Model 类的创建MeshModel绘制模型华中科技大学《计算机图形学》课程 MOOC地址&#xff1a;计算机图形学&#xff08;HUST&#xff…

进阶C语言

1.数据的存储 1.1 为什么数据在内存中存放的是补码 因为CPU只有加法器,而使用补码&#xff0c;就可以将符号位和数值域统一处理(即统一处理加法和减法)且不会需要额外的硬件电路。 1.2 为什么会有大小端 这是因为在计算机系统中,是以字节为单位的,比如: 每个地址单元都对应着…