Vue 基础语法

【1】模板语法

(1)差值表达式

  • {{}}是 Vue.js 中的文本插值表达式。

    • 它用于在模板中输出数据或表达式的值。当数据或表达式的值发生变化时,插值表达式会自动更新。
  • 补充:三目运算符

    • 它的基本语法是 Condition ? A : B,意思是当 Condition 为真时,执行 A,否则执行 B

image-20240424185144908

<body>
<div id="app"><li>字符串:{{name}}</li><li>数值:{{age}}</li><li>数组:{{list1}}</li><li>对象:{{obj1}}</li><li>字符串:{{link1}}</li><li>运算:{{1 + 2 +3 + 4}}</li><li>三目运算符:{{1 > 2 ? 'Y' : 'N'}}</li>
</div>
</body><script>var vm = new Vue({el: "#app",data: {name: 'bruce',age: 18,list1: [1, 2, 3, 4],   // 数组obj1: {name: 'Darker', age: 19},link1: '<a href="https://www.baidu.com">百度一下 你就知道</a>'}})
</script>

【2】文本指令

(1)v-html和v-text

  • v-html

    • v-html 指令用于更新元素的 innerHTML

    • 这个指令可以输出真正的 HTML 内容,而不仅仅是纯文本。

      • 如果你尝试用双花括号 {{ }} 插入 HTML,它将被转义并显示为纯文本。
      • 但是使用 v-html 可以直接插入 HTML 内容。
    • 使用 v-html可能会带来 XSS 攻击的风险

  • v-text

    • v-text 指令用于更新元素的文本内容。
    • 它基本上与双花括号 {{ }} 的功能相同,但 v-text 不会在元素上创建额外的文本节点。
    • 如果元素已经包含文本内容,v-text 会替换这些文本内容。

image-20240424172743630

<body>
<div id="app"><div v-html="htmlContent"></div><div>{{htmlContent}}</div><hr><div v-text="textContent"></div><div>{{textContent}}</div>
</div>
</body><script>var vm = new Vue({el: "#app",data: {htmlContent: '<span style="color: red">标签:红色文字</span>',textContent: '纯文本内容'}})
</script>

(2)v-if和v-show

  • v-if
    • v-if 指令用于条件性地渲染一个元素
    • 只有当其表达式的值为真值时,才会渲染元素及其内容。如果表达式的值为假值,则元素及其内容不会被渲染到 DOM 中。
    • 这意味着每次 v-if 的条件改变时,都会进行条件块的销毁或重建,这是一个“真正”的条件渲染。
  • v-show
    • v-show 指令与 v-if 类似,也是用于根据条件来显示或隐藏元素。但是,无论 v-show 的表达式值为真值还是假值,元素始终会被渲染到 DOM 中。
    • v-show 只是简单地通过切换元素的 CSS 属性 display控制其可见性
image-20240424184439938
<div id="app"><div v-if="true">v-if渲染</div><div v-if="false">v-if不渲染</div><hr><div v-show="true">v-show渲染</div><div v-show="false">v-show不渲染</div>
</div>

【3】事件指令

(1)v-on+click

  • Vue 提供了许多事件指令,用于处理 DOM 事件这些指令以 v-on 或其简写 @ 开头,后面跟上要监听的事件名称。
  • 当在 Vue 组件的模板中使用这些指令时,它们可以绑定到组件的方法或表达式上,以便在特定事件发生时执行相应的操作。
<body>
<div id="app"><span v-text="info" v-on:click="handleClick" style="background-color: coral; font-size: 30px"></span><br><img v-show="pTag" src="https://pic.netbian.com/uploads/allimg/240420/003439-1713544479de41.jpg" alt=""height="300px" width="500px">
</div>
</body><script>var vm = new Vue({el: "#app",data: {pTag: true,info: "关闭图片",},methods: {handleClick: function () {this.pTag = !this.pTagconsole.log(this.pTag)if (this.pTag) {this.info = '关闭图片'} else {this.info = '显示图片'}},}})
</script>

image-20240425161000332

(2)参数问题

  • 示例:v-on:click@click后面跟着自定义事件,正常传参正常执行,这里说一下不正常的情况
    • 函数有参,前端方法不传递,不加括号 ----> 函数将拿到当前操作事件
    • 函数有参,前端方法不传参数,加括号 ----> 函数将拿不到任何值
    • 函数有参,前端方法多传参数(‘1’, ‘2’) ----> 函数将拿到接收个数的参数
    • 函数有参,前端方法手动传递($event) ----> 函数将拿到当前操作事件

image-20240425162546478

<body>
<div id="app"><h2 v-text="info1" @click="handleClick">dada</h2><h2 v-text="info2" @click="handleClick()">dada</h2><h2 v-text="info3" @click="handleClick('1', '2')">dada</h2><h2 v-text="info4" @click="handleClick($event)">dada</h2>
</div>
</body><script>var vm = new Vue({el: "#app",data: {info1: "函数有参,前端方法不传递,不加括号",info2: "函数有参,前端方法不传参数,加括号",info3: "函数有参,前端方法多传参数('1', '2')",info4: "函数有参,前端方法手动传递($event)",},methods: {handleClick: function (e) {console.log(e)},}})
</script>

【4】属性指令v-bind

(1)基础属性src等

  • v-bind是 vue 中的一个核心指令,用于响应式地更新 HTML 属性。可以简写为:,简单来说就是将属性变为了变量。
  • 其基本功能是将表达式(通常是 JavaScript 表达式)的结果绑定到一个元素的属性上。这样,当 Vue 实例中的数据发生变化时,绑定的属性也会自动更新。

image-20240425163859157

<body>
<div id="app"><button v-text="info" @click="handleChange" style="font-size: 30px"></button><img :src="imageList[index]" style="display: block; width: 500px; height: 300px;">
</div>
</body><script>var vm = new Vue({el: "#app",data: {info: "切换图片",index: 0,imageList: ["https://pic.netbian.com/uploads/allimg/240424/003411-1713890051411d.jpg", "https://pic.netbian.com/uploads/allimg/240424/001415-171388885570eb.jpg", "https://pic.netbian.com/uploads/allimg/240422/005357-17137184373f8b.jpg"]},methods: {handleChange: function () {this.index = (this.index + 1) % this.imageList.length},}})
</script>

(2)style和class属性

  • class属性语法::class='字符串、js数组、js对象'
    • 字符串格式:需要手动拼接样式,不推荐
      • classStr: "div1"
      • this.classStr = this.classStr + ' div2'
    • js数组格式:需要对列表进行添加push操作删除pop操作推荐
      • classList: ["div1"]
      • this.classList.push("div2")
    • js对象格式:通过键值对修改样式,判断键对应值的Bool值,不推荐
      • classObj: {"div1": true, "div2": false}
      • this.classObj.div2 = true

image-20240425172737072

<style>.div1 {background-color: #44f1aa;height: 200px;width: 200px;}.div2 {border-radius: 50%;}
</style><body>
<div id="app"><button v-text="info" @click="handleChange"></button><div :class="classObj"></div>
</div>
</body><script>var vm = new Vue({el: "#app",data: {info: "样式切换",// 字符串形式classStr: "div1",// js数组形式classList: ["div1"],// js对象形式classObj: {"div1": true, "div2": false}},methods: {handleChange: function () {// 字符串形式操作// this.styleStr = this.styleStr + ' div2'// js数组形式操作// this.styleList.push("div2")// js对象形式操作this.classObj.div2 = true},}})
</script>
  • style属性语法::style='字符串、js数组、js对象'

    • 字符串格式:需要手动拼接样式,不推荐

      • styleStr: "background-color: #44f1aa; height: 200px; width: 200px;"
      • this.styleStr = this.styleStr + ' border-radius: 50%;'
    • js数组格式:需要对列表进行添加push操作删除pop操作,不推荐

      • styleList: [{backgroundColor: "#44f1aa"}, {height: "200px"}, {width: "200px"}]

      • this.styleList.push({borderRadius: "50%"})

    • js对象格式:通过键值对修改样式,判断键对应值的Bool值,推荐

      • styleObj: {backgroundColor: "#44f1aa", height: "200px", width: "200px"}
      • this.styleObj.borderRadius = "50%"
  • 但是有时候会出现这种情况:页面中的值修改成功了,但是样式却没有改变,这是因为ViewModel的并没有识别到属性的变化

image-20240426105852869

  • 这个时候需要使用Vue的语法set
    • Vue.set 的语法用于向响应式对象添加一个属性,并确保这个新属性也是响应式的。
    • Vue.set(target, propertyName/index, value)
      • target: 目标对象或数组。
      • propertyName/index: 要添加或修改的属性名(对于对象)或索引(对于数组)。
      • value: 要设置的新值。
<body>
<div id="app"><button v-text="info" @click="handleChange"></button><div :style="styleObj"></div>
</div>
</body><script>var vm = new Vue({el: "#app",data: {info: "样式切换",// 字符串形式styleStr: "background-color: #44f1aa; height: 200px; width: 200px;",// js数组形式styleList: [{backgroundColor: "#44f1aa"}, {height: "200px"}, {width: "200px"}],// js对象形式styleObj: {backgroundColor: "#44f1aa", height: "200px", width: "200px"}},methods: {handleChange: function () {// 字符串形式操作this.styleStr = this.styleStr + ' border-radius: 50%;'// js数组形式操作this.styleList.push({borderRadius: "50%"})// js对象形式操作// this.styleObj.borderRadius = "50%"Vue.set(this.styleObj, "borderRadius", "50%")},}})
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式Java实现-工厂模式

✨这里是第七人格的博客✨小七&#xff0c;欢迎您的到来~✨ &#x1f345;系列专栏&#xff1a;设计模式&#x1f345; ✈️本篇内容: 工厂模式✈️ &#x1f371;本篇收录完整代码地址&#xff1a;https://gitee.com/diqirenge/design-pattern &#x1f371; 楔子 记得刚…

Junit 测试中如何对异常进行断言

本文对在 Junit 测试中如何对异常进行断言的几种方法进行说明。 使用 Junit 5 如果你使用 Junit 5 的话,你可以直接使用 assertThrows 方法来对异常进行断言。 代码如下: Exception exception = assertThrows(NumberFormatException.class, () -> {new Integer("on…

Java的java.util.concurrent.ExecutorService简介

在Java并发编程的璀璨星空中&#xff0c;ExecutorService无疑是那颗最耀眼的明星。它不仅是Java并发编程的核心组件之一&#xff0c;更是构建高并发、高性能应用的秘密武器。今天&#xff0c;我们就来一场说走就走的探索之旅&#xff0c;揭开它的神秘面纱&#xff01; &#x1…

wordpress外贸建站公司歪建站新版网站上线

wordpress外贸建站公司 歪猫建站 歪猫WordPress外贸建站&#xff0c;专业从事WordPress多语言外贸小语种网站建设与外贸网站海个推广、Google SEO搜索引擎优化等服务。 https://www.waimaoyes.com/dongguan

【1小时掌握速通深度学习面试6】图神经网络-下

目录 23. GraphSage 24.简述图神经网络的推理机制在其他领域中的应用 与传统NN的区别&#xff08;GNN优点&#xff09; 23. GraphSage GraphSage出现之前的图网络方法需要图中所有的顶点在训练embedding的时候都出现&#xff0c;这些的方法本质上是transductive&#xff0c…

计算机是如何执行指令的

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

【数据结构】有关环形链表题目的总结

文章目录 引入 - 快慢指针思考 - 快慢指针行走步数进阶 - 寻找环形链表的头 引入 - 快慢指针 141-环形链表 - Leetcode 关于这道题&#xff0c;大家可以利用快慢指针&#xff0c;一个每次走两步&#xff0c;一个每次走一步&#xff0c;只要他们有一次相撞了就代表说这是一个链…

Django实验(远程访问+图片显示)

众所周知&#xff0c;Python除了不能生孩子什么都会。Python也是可以做web服务的。 Python做web有一个重点优势是&#xff1a;做一个快速的AI Demo。 第一步&#xff1a;安装一个版本5.0以上django 第二步&#xff1a;构建咱们的Django工程&#xff0c;我取名为BBQ django-adm…

仅为娱乐,Python中如何重定义True为False?

在Python中&#xff0c;True 和 False 是内建的布尔常量&#xff0c;分别代表逻辑上的真和假。它们是不可变的&#xff0c;且在Python语言规范中具有特殊地位&#xff0c;不能被用户直接重定义。尝试给 True 或 False 赋予新的值是违反Python语言规则的&#xff0c;这样的操作会…

(论文阅读-优化器)Orca: A Modular Query Optimizer Architecture for Big Data

目录 摘要 一、简介 二、背景知识 2.1 大规模并行处理 2.2 SQL on Hadoop 三、Orca架构 四、查询优化 4.1 优化工作流 4.2 并行查询优化 五、Metadata Exchange 六、可行性 6.1 Minimal Repros 6.2 优化器准确性测试 七、实验 八、相关工作 8.1 查询优化基础 8…

基于51单片机NEC协议红外遥控发送接收proteus仿真设计

1.主要功能&#xff1a; 设计一个51单片机红外遥控发射接收proteus仿真设计 功能要求&#xff1a; 1、使用单片机模拟红外遥控器发射红外编码&#xff1b; 2、利用从机接收红外编码&#xff0c;并将编码以16进制显示到数码管上。 需注意仿真中51单片机芯片是兼容的&#x…

最近惊爆谷歌裁员

Python团队还没解散完&#xff0c;谷歌又对Flutter、Dart动手了。 什么原因呢&#xff0c;猜测啊。 谷歌裁员Python的具体原因可能是因为公司在进行技术栈的调整和优化。Python作为一种脚本语言&#xff0c;在某些情况下可能无法提供足够的性能或者扩展性&#xff0c;尤其是在…