Vue.js常见指令

news2024/9/9 1:05:01

一、v-text与v-html

v-text更新html元素的innerText

v-html更新html元素的innerHtml

如果需要更新部分内容需要使用{{ }} 双括号差值表达式

案例:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>VUE指令 v-text v-html</title>
    <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
  </head>
  <body>
    <!-- 
     v-html 可以识别标签
     v-text 不可以识别标签
     两个都会替换标签元素的内容
     -->
    <div id="app">
      <div v-text="info"> <span>默认</span> 666 </div>
      <div v-html="info"> <span>默认</span> 666 </div>
    </div>
    
    <script type="text/javascript">
      const vm = new Vue({
        el:"#app",
        data:{
          info:" <p> 这是个段落 </p> "
        }
      })
</script>
    
  </body>
</html>

二、v-if与v-show

两者都是根据表达式的值得真假确定是否渲染元素

v-if表达式真假改变时元素会被销毁或者重建

v-show表达式真假改变时元素不会被销毁或者重建,只是切换了display属性

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Vue指令 v-if</title>
    <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
  </head>
  <body>
    
    <div id="app">
      <!-- v-if 每次都会渲染原始文本 (重建元素) -->
      <p v-if="flag">这是p标签</p>
      <span v-else>这是行内标签</span>
      
      <span v-if="score>90">优秀</span>    
      <span v-else-if="score>70">还行</span>
      <span v-else-if="score>60">凑乎</span>
      <span v-else>渣渣</span>
      <!-- v-show只是切换元素display样式 -->
      <p v-show="flag">这是个段落</p>
    </div>
    
    <script type="text/javascript">
      const vm = new Vue({
        el:"#app",
        data:{
          flag:false,
          score:80
        }
      })
</script>
  </body>
</html>

<!-- 
 怎么考虑使用v-if 或者 v-show
 频繁切换使用v-show
 在初始化时就控制显示隐藏使用v-if
 v-show初始开销大  v-if频繁切换开销大
 -->

三、v-for

列表渲染 需要使用v-for

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>VUE 指令 v-for</title>
    <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
  </head>
  <body>
    <div id="app">
      <!-- item 项目   代表可迭代对象中的一个元素 -->
      <!-- :key 用于VUE虚拟DOM的优化操作 只可以取值 number string -->
      <!-- 遍历数组得到第一个形参为数组中的每一个对象  第二个形参为元素索引 -->
      <p v-for="(item,index) in weekday" :key="item"> {{index}} {{item}}</p>
      <!-- 遍历证书 第一个形参为从1开始的数值 第二个形参为索引-->
      <span v-for="(item,index) in 9" :key="index">{{index}}--{{item}}</span>
      <!-- 遍历字符串第一个形参为每一个字符 第二个形参为索引 -->
      <p v-for="(item,index) in 'hello'" >{{index}}--{{item}}</p>
      <!-- 遍历对象时第一个形参为值 第二个形参为键 第三个形参为索引 -->
      <div v-for="(value,key,index) in myobj" :key="key">{{index}}--{{key}}--{{value}}</div>
    </div>
    
    <script type="text/javascript">
      const vm = new Vue({
        el:"#app",
        data:{
          weekday:["星期1","星期2","星期3","星期4","星期5","星期6","星期7",],
          myobj:{
            name:"zzy",
            age:20
          }
        }
      })
</script>
  </body>
</html>

四、v-on与@

所注册的事件都要写在methods属性中

v-on:事件名称

v-on:事件名称形式 可以使用@事件名称替代

@click.once可以执行一次事件

@click.prevent 可以阻止默认事件执行

@click.stop 可以阻止事件冒泡

@keyup.enter键盘之类事件

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>VUE 指令 v-on</title>
    <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
  </head>
  <body>
    <div id="app">
      <!-- 监听键盘事件 -->
      <input type="text" @keyup.a.n="mykeyup">监听按键
      <br>
      <!-- 阻止默认事件 -->
      <a href="http://www.baidu.com" @click.prevent>百度</a>
      <!-- 仅执行一次 -->
      <span @click.once="goto123()">点击只有一次相应</span>
      <div id="div1">
        div1
        <div id="div2" @click="myclick2">
          div2
          <div id="div3" @click.stop="myclick3">
            div3
          </div>
        </div>
      </div>
      
    </div>
    <script type="text/javascript">
      const vm = new Vue({
        el:"#app",
        data:{
          
        },
        methods:{
          myclick2(){
            console.log("点击了div2");
          },
          myclick3(){
            console.log("点击了div3");
          },
          goto123(){
            console.log("goto 123");
          },
          mykeyup(e){
            console.log("抬起",e.key);
          }
        }
      })
</script>
  </body>
</html>

五、v-bind与冒号(😃

可以将data中变量与属性进行绑定

v-bind:属性名=“”

v-bind可以省略直接使用 :属性名

当绑定的为class或者style样式时需要注意有所不同

:class 值为数组时根据数组中元素的真实值取类名 值为对象时根据键值对的值确定类名是否有键

:style 值为数组时需要使用对象作为数组元素 值为对象键值对即为style样式键值对

案例:绑定普通属性

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>VUE</title>
    <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
  </head>
  <body>
    <div id="app">
      <!-- 使用v-bind绑定title属性   如果值中有纯粹字符串需要使用字符串格式单引号或者双引号 -->
      <span v-bind:title="info+'span1'">鼠标划入有提示</span>
      <!-- 使用冒号代替 v-bind -->
      <span :title="info+'span2'">鼠标划入有提示</span>
      <!-- 绑定的值为对象 -->
      <a :href="baidu.href">{{baidu.text}}</a>
    </div>
    
    <script type="text/javascript">
      const vm = new Vue({
        el:"#app",
        data:{
          info:"我是一个span",
          baidu:{
            href:"http://www.baidu.com",
            text:"百度"
          }
        }
      })
</script>
  </body>
</html>

案例:绑定类名

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>VUE</title>
    <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    <style type="text/css">
      p.red{
        color: red;
      }
      p.blue{
        background-color: lightblue;
      }
      p.bigger{
        font-size: 30px;
      }
</style>
  </head>
  <body>
    <!-- 
    使用v-bind绑定类名需要注意 可以有列表和字典两种形式 
    如果是列表  列表中元素如果是纯字符串 直接使用  如果是变量 类名就是变量对应的值
    如果是字典  类名能不能取键 取决于键对应的值为true或者false   如果值为变量 需要解释
    列表中的元素 是不是 类名?如果是变量 类名是变量对应的值     如果是纯字符串 类名为该字符串
    对象中的健 是不是类名?键一定是类名  但是能不能显示这个类名 取决于键对应的值
     -->
    <div id="app">
      
      <p :class="[color,'blue']" class="bigger">p1</p>
      <p :class="{red:true,blue:flag}">p2</p>
    </div>
    
    <script type="text/javascript">
      const vm = new Vue({
        el:"#app",
        data:{
          color:"red",
          flag:false
        }
      })
</script>
  </body>
</html>

案例:绑定样式

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>VUE</title>
    <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
  </head>
  <body>
    <div id="app">
      <p style="color: red; background-color: lightcoral;">p1</p>
      
      <!-- 当:style 值为对象时 对象的健必须为样式名 不能使用-这个连字符 需要转小驼峰 
        对象的值 如果是变量 需要解释  如果是纯字符串 直接使用
       -->
      <p :style="{color:color,backgroundColor: 'lightcoral'}" style="font-size: 30px;">p2</p>
      
      <!-- 当style的值为数组时 要求数组中的每一个元素都必须为对象
      对象 中的健必须是样式属性名  对象的值如果是变量需要解释  如果是纯字符串 直接使用
       -->
      <p :style="[{color:color},{backgroundColor:'lightcoral'} ]">p3</p>
    </div>
    <script type="text/javascript">
      const vm = new Vue({
        el:"#app",
        data:{
          color:"red",
        }
      })
</script>
  </body>
</html>

六、v-model

在表单控件或者组件上创建双向数据绑定

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>VUE指令v-model</title>
    <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
  </head>
  <body>
    
    <div id="app">
      <form action="#" method="get">
        <div>
          <h1>普通输入框使用字符串</h1>
          <input name="normal" type="text" v-model="info">
          <br>
          你输入的为 <span>{{info}}</span>
        </div>
        
        <div>
          <h1>复选框使用数组</h1>
          爱好:
          <br>
            足 <input name="hobbys" v-model="hobbys" type="checkbox" value="足球">
          <br>
            篮 <input name="hobbys" v-model="hobbys" type="checkbox" value="篮球">
          <br>
            羽毛 <input name="hobbys" v-model="hobbys" type="checkbox" value="羽毛球">
        </div>
        
        <div>
          <h1>单选框使用字符串</h1>
          性别:
          <br>
          男 <input type="radio" v-model="gender" value="男生" name="sex">
          <br>
          女 <input type="radio" v-model="gender" value="女生" name="sex">
          
        </div>
        
        <div>
          <h1>单个下拉选项使用字符串</h1>
          <select name="address" v-model="address">
            <option value="上海">上海</option>
            <option value="北京">北京</option>
            <option value="广州">广州</option>
          </select>
        </div>
        
        <div>
          <h1>多个下拉选项使用数组</h1>
          <select name="address2" v-model="address2" multiple>
            <option value="上海">上海</option>
            <option value="北京">北京</option>
            <option value="广州">广州</option>
          </select>
        </div>
        <input type="submit" value=""/>
      </form>
    </div>
    
    <script type="text/javascript">
      const vm = new Vue({
        el:"#app",
        data:{
          // MVVM 双向绑定 将数据同步到视图   将视图同步到数据
          info:"",
          hobbys:["篮球","羽毛球"],
          gender:"女生",
          address:"广州",
          address2:["广州","北京"]
        }
      })
</script>
  </body>
</html>

七、自定义指令

可以使用vue的directives属性扩展指令

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>VUE自定义指令</title>
    <style type="text/css">
      #div{
        height: 50px;
        background-color: lightblue;
      }
</style>
    <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
  </head>
  <body>
    <div id="app">
      <div v-show="flag">v-show 使用原生指令控制显示隐藏效果 </div>
      <div v-myshow="flag">v-myshow 使用自定义指令控制显示隐藏效果</div>
      <div id="div" v-dbsize="flag">v-dbsize 使用自定义指令控制尺寸变化效果</div>
      <button @click="flag=!flag">点击切换div效果</button>
    </div>
    
    <script type="text/javascript">
      const vm = new Vue({
        el:"#app",
        data:{
          flag:true
        },
        directives:{
          "dbsize":{
            inserted(ele,state){
              if(state.value){
                let height = getComputedStyle(ele).height;
                height= height.substr(0,height.length-2);
                ele.style.height = height*2 +"px";
              }
            },
            update(ele,state){
              if(state.value){
                let height = getComputedStyle(ele).height;
                height= height.substr(0,height.length-2);
                ele.style.height = height*2 +"px";
              }
              else{
                let height = getComputedStyle(ele).height;
                height= height.substr(0,height.length-2);
                ele.style.height = height/2 +"px";
              }
            }
          },
          "myshow":{
            //  创建元素时执行
            inserted(element,state){
              if(state.value){
                element.style.display="block";
              }else{
                element.style.display="none";
              }
            },
            // flag值发生变化会执行
            update(element,state){
              if(state.value){
                element.style.display="block";
              }
              else 
              {
                element.style.display="none";
              }
            }
            
          }
        }
      })  
</script>
  </body>
</html>

在这里插入图片描述

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

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

相关文章

python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法

问题 升级新版pip 之后,不论是本地,还是使用anaconda环境,都有可能在用pip下载的时候出现错误: ModuleNotFoundError: No module named pip._internal&#xff0c;我的电脑中存在好几个版本的Python。 解决办法&#xff1a; python -m ensurepip python -m pip install --upgr…

图片及色彩编码

1、日期类 ###年份 date_format(KaTeX parse error: Expected EOF, got # at position 14: 批售月份, %Y年) #̲##季度 (CASE WHEN…批售月份, ‘%m’) IN (1,2,3) THEN ‘1季度’ WHEN date_format( 批售月份 , ′ W H E N d a t e f o r m a t ( 批售月份, %m) IN (4,5,6) TH…

【鸿蒙踩坑记录】解决:tabs滑动时,第一个和最后一个页签回弹大问题

一、背景 tabs滑动切换时&#xff0c;第一个页签右滑回弹大&#xff0c;最后一个页签左滑回弹大&#xff0c;如何关闭回弹效果 二、问题展现 图1:第一个页签右滑时回弹较大 图2:最后一个页签左滑时回弹较大 预期&#xff1a;关闭回弹效果 三、实现思路 给第一个和最后一个…

项目负责人的高效会议策略:从准备到追踪

项目负责人的高效会议策略&#xff1a;从准备到追踪 前言一、会议低效的常见陷阱二、高效会议的准备策略三、会议实施的技巧四、会议追踪的重要性结语 前言 在项目管理的世界里&#xff0c;时间就是金钱&#xff0c;效率就是生命。作为项目负责人&#xff0c;我深刻体会到了会议…

Java网络编程----UDP实现单播,组播,广播

文章开头&#xff0c;先来回忆一下 什么是UDP&#xff1f; UDP 的全称是 User Datagram Protocol&#xff0c;用户数据报协议。它不需要所谓的握手操作&#xff0c;从而加快了通信速度&#xff0c;允许网络上的其他主机在接收方同意通信之前进行数据传输。 UDP 的特点主要有…

Python 教程(七):match...case 模式匹配

目录 专栏列表前言基本语法match 语句case 语句 模式匹配的类型示例具体值匹配类型匹配序列匹配星号表达式命名变量复杂匹配 模式匹配的优势总结 专栏列表 Python教程&#xff08;一&#xff09;&#xff1a;环境搭建及PyCharm安装Python 教程&#xff08;二&#xff09;&…

智能环保气膜网球馆:大空间与防雾霾的完美结合—轻空间

在现代都市生活中&#xff0c;空气质量和空间限制成为许多体育设施的挑战。气膜技术的出现&#xff0c;为这些问题提供了卓越的解决方案。我们的智能环保气膜网球馆&#xff0c;不仅拥有宽敞的空间&#xff0c;还具备卓越的防雾霾功能&#xff0c;为体育爱好者提供了一个理想的…

牧野电火花机床联网

一、找到可选项 选择主面板中的【可选项】按钮&#xff0c;弹出来的对话框如下图所示。 二、属性设定 在左下角部分找到【属性设定】&#xff0c;如序号一所示&#xff0c;在弹出的属性设定对话框中选中【牧野EDM服务器】&#xff0c;如下图所示。 三、选则MES模式 按照上图…

苹果推送iOS 18.1带来Apple Intelligence预览

&#x1f989; AI新闻 &#x1f680; 苹果推送iOS 18.1带来Apple Intelligence预览 摘要&#xff1a;苹果向iPhone和iPad用户推送iOS 18.1和iPadOS 18.1开发者预览版Beta更新&#xff0c;带来“Apple Intelligence”预览。目前仅支持M1芯片或更高版本的设备。Apple Intellige…

Electron学习笔记(一)基础环境

目录 前言 基础环境准备 安装 Node.js 配置项目文件 通过代理服务安装 通过国内仓库安装 一些常见问题&#xff1a; 前言 一个新手学习Electron的笔记&#xff0c;记录为主&#xff0c;仅供参考。 其他文章见专栏目录。 基础环境准备 开发之前先将基础环境搭建好。 …

灯具外贸公司用什么企业邮箱好

灯具外贸公司面对海外市场的推广、产品销售、客户沟通、市场信息收集等多重需求&#xff0c;选择一个合适的企业邮箱显得尤为重要。本文将介绍灯具外贸公司为什么应选择Zoho Mail企业邮箱&#xff0c;并详细探讨其优势和功能。 一、公司背景 广东省深圳市光明新区&#xff0c…

创建 Llama-3.1-70B-Japanese-Instruct-2407 的 Ollama 模型

创建 Llama-3.1-70B-Japanese-Instruct-2407 的 Ollama 模型 1. 下载 gguf 文件2. 创建 Modelfile3. 创建 Ollama 模型4. 运行 Ollama 模型5. &#xff08;可选&#xff09;其他 Modelfile 1. 下载 gguf 文件 使用浏览器打开 https://huggingface.co/mmnga/Llama-3.1-70B-Japa…

DELL服务器RAID配置详细教程

DELL服务器RAID配置教程 在启动电脑的时候按CTRLR 进入 RAID 设置见面如下图 名称解释&#xff1a; Disk Group&#xff1a;磁盘组&#xff0c;这里相当于是阵列&#xff0c;例如配置了一个RAID5&#xff0c;就是一个磁盘组 VD(Virtual Disk)&#xff1a; 虚拟磁盘&#xff…

FFmpeg模块详解:深入理解多媒体框架的构成

&#x1f60e; 作者介绍&#xff1a;欢迎来到我的主页&#x1f448;&#xff0c;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff08;领取大厂面经等资料&#xff09;&#xff0c;欢迎加我的…

为了人才任正非一个月蹲守人家单位门口,刘备三顾茅庐算啥!

张一鸣说&#xff1a;"一名优秀的CEO首先应该是优秀的HR&#xff01;”这句话广为流传&#xff0c;此言差矣&#xff0c;一名卓越的创始人首先应该是最卓越的猎头&#xff0c;比如任正非&#xff01; 全球的创始人也没几个人能够做像任正非那样重视人才的&#xff0c;一旦…

成为git砖家(7): posh-git的安装和使用

文章目录 1. PowerShell 里的 git 默认使用体验不够好2. posh-git 介绍2.1 安装 posh-git2.2 PS1 显示的内容2.3 补全分支 1. PowerShell 里的 git 默认使用体验不够好 在 Windows 系统上&#xff0c;安装了 git for windows 后&#xff0c; git bash 里的体验确实不错。 但是…

【云原生】kubernetes弃用docker,containerd风华正茂,何以承载云原生?

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

JAVA基础 - 泛型

目录 一. 简介 二. 集合泛型 三. 自定义泛型 四. 自定义泛型类和普通类的区别 一. 简介 泛型是 Java 语言中一种强大的特性&#xff0c;它允许在定义类、接口和方法时使用类型参数&#xff0c;从而增加了代码的类型安全性和复用性。 类型安全性&#xff1a; 使用泛型可以…

leetcode日记(60)编辑距离

感觉这题不是按难度划分的而是按代码长度划分的…看了答案才知道怎么做&#xff0c;其实思路很简单&#xff0c;但是特别难想…… 意思是使用动态规划&#xff0c;依次计算由word1的前i个字母到word2的前j个字母要经历的最小变化数。 min D[i][j]min(D[i-1][j]1,D[i][j-1]1,D…