Vue的进阶使用--模板语法应用

news2024/12/24 10:08:19

目录

前言

一. Vue的基础语法

1.插值

1.1文本插值

1.2HTML插值

1.3属性插值

1.4Vue演示三元条件运算

2 指令

2.1if&&else指令(v-if/v-else-if/v-else)

2.2 v-for 指令

2.3 v-on指令(动态参数)

2.4知识点补充之v-if与v-show的区别

 3.过滤器

3.1局部过滤器

3.2 全局过滤器

4.计算属性与监听属性

4.1计算属性

4.2 监听属性

4.3区别总结:

 二.购物车案例


前言

Vue.js 的模板语法是一种声明式的、直观的方式来构建用户界面。它允许开发者将 DOM 结构与 Vue 实例的数据和行为进行绑定,从而实现数据驱动的视图

一. Vue的基础语法

1.插值

1.1文本插值

文本插值就是利用最基础的插值表达式

<div id="app">
	{{msg}}
</div>

然后将Vue实例中的数据属性的值动态显示在HTML元素中

new Vue({
	el:"#app",
	data(){
	    return {
	        msg:'hello Vue',
				}
			}
	})
			

1.2HTML插值

如果我们想将HTML代码插入到模板中而不是纯文本,可以使用 v-html 指令

<div id="app">
	<p v-html="msg_html"></p>
</div>

 然后在data返回的值中定义一个msg_html,可以将html代码带入,并展示效果

new Vue({
	el:"#app",
	data(){
	return {
			msg_html:'<span style="color:pink">Hello YU</span>'
			}
		}
})

效果演示 

 

1.3属性插值

我们可以使用插值表达式绑定元素的属性,例如class、id、src等等,这里演示插入class值,为了演示效果,我们将等下要插入的class属性值添加样式

<style type="text/css">
	.cl{
		color:pink
	}
</style>

然后在Vue实例返回的data值中定义一个msg_class

new Vue({
	el:"#app",
	data(){
		return {
			msg_class:"cl"
				}
			}
		})

最后在HTML代码中对其进行属性插值

<div id="app">
			{{msg}}
			<p v-html="msg_html"></p>
			<p :class="msg_class">Hi YU</p>
		</div>

演示效果

1.4Vue演示三元条件运算

首先编写vue实例 

new Vue({
		el:"#app",
		data(){
			return {
				result:true
				}
			}
		})

在表达式中利用三元条件运算得出结果

<p>{{result? '很帅':'一般'}}</p>

因为我们的在属性定义的是true,所以结果为'很帅' 

由此可得知,表达式中支持三元条件运算

2 指令

2.1if&&else指令(v-if/v-else-if/v-else)

我们可以利用其指令制作一个分数评级器,当我们在输入分数时判定相应的级别

首先在HTML代码中利用v-model双向绑定输入框中的数据,再利用if-else进行判断展示不同内容

<div id="app">
			<p>v-if/v-else-if/v-else</p>
			<input v-model="score"/><br />
			<b v-if="score < 60">不及格</b>
			<b v-else-if="score > 60 && score<90">良好</b>
			<b v-else-if="score > 90 && score <=100">优秀</b>
			<b v-else="">分数不准确</b>
		</div>

进行编写Vue实例

new Vue({
				el:"#app",
				data(){
					return {
						score:69,
					}
				}
			})

我们可以自由在输入框输入分数进行评级

2.2 v-for 指令

我们可以根据数据源的内容多次渲染DOM元素,以便动态显示列表、表格、或其他重复的内容

首先在Vue实例中定义数据源,这里定义一个JSON数组

new Vue({
				el:"#app",
				data(){
					return {
						user:[{
							name:'YU',id:1
						},{
							name:'sz',id:2
						},{
							name:'lx',id:3
						},]
					}
				}
			})

然后在HTML代码中利用v-for指令拿到数据源中的属性值

<div id="app">
			<p>v-for指令</p>
			<i v-for="i,u in user">{{i.name}}&nbsp;</i>
		</div>

演示效果

v-for指令可以作用在很多元素中,例如下拉框、多选框、单选框等等,当数据需要循环获取到并展现在页面上时可以使用Vue中的v-for指令,进行数据绑定 

2.3 v-on指令(动态参数)

从2.6.0开始,可以用方括号括起来的JavaScript表达式作为一个指令的参数

(1)首先在vue实例中默认定义一个参数,然后写一个方法弹窗演示效果

new Vue({
				el:"#app",
				data(){
					return {
						evname:'click'
					}
				},
				methods:{
					test(){
						alert("Hi Vue")
					}
				}
			})

(2) 然后在HTML代码中,先将输入框中数据对data返回值进行绑定,然后通过v-on进行动态传参,当我们在输入框中输入不同的操作时(传递不同的参数),演示的效果也会不同

<div id="app">
			<input v-model="evname"/>
			<button v-on:[evname]="test">点我</button>
		</div>

 (3)演示效果

操作详解:

当我们输入click时,需要单击按钮弹出内容

输入dblclick时,需要双击按钮弹出内容

输入不同参数,进行的操作也不同

2.4知识点补充之v-if与v-show的区别

v-ifv-show 是Vue.js中两种常用的指令,用于根据条件控制元素的显示和隐藏。它们之间有几个重要的区别:

  1. DOM 渲染方式

    • v-if:当条件为真时,DOM元素会被渲染到页面上;当条件为假时,DOM元素会从DOM树中移除。
    • v-show:无论条件是真还是假,DOM元素始终会被渲染到页面上,只是通过CSS的display属性控制其显示或隐藏。
  2. 初始渲染性能

    • v-if:在初始渲染时,如果条件为假,该元素不会被渲染到DOM中,因此初始渲染性能比v-show更好。
    • v-show:无论条件真假,元素都会被渲染,只是通过CSS的display属性控制其显示或隐藏,初始渲染性能稍逊于v-if
  3. 切换开销

    • v-if:切换时会有DOM的创建和销毁,可能会有较大的性能开销,尤其在频繁切换时。
    • v-show:切换时只需要切换display属性,性能开销较小。
  4. 适用场景

    • v-if:适用于在条件不经常改变时,或者条件依赖于异步操作结果的情况,可以更好地利用DOM的性能优势。
    • v-show:适用于需要频繁切换显示/隐藏的情况,例如对话框、菜单等,可以减少DOM的重复渲染。

 3.过滤器

3.1局部过滤器

创建Vue实例

new Vue({
				el:"#app",
				filters:{
					'fileterA':function(v){
						return v.substring(0,3)
					},
					'fileterC':function(v,begin,end){
						return v.substring(begin,end)
					},
				},
				data(){
					return {
						msg:"今天天气真好",
						}
				},
				
				methods:{
					
				}
			})

(1)局部过滤器基本使用

<div id="app">
			<p>局部过滤器</p>
			{{msg}}
			<p>局部过滤器基本使用</p>
			{{msg | fileterA}}
		</div>

(2)局部过滤器传参使用

<div id="app">
			<p>局部过滤器</p>
			<p>局部过滤器传参使用</p>
			{{msg | fileterC(1,3)}}
		</div>

 演示结果

3.2 全局过滤器

我们在创建vue实例之前先引入js文件,后面调用格式化时间

(1)创建实例

new Vue({
	el:"#app",
	data(){
		return {
			time:new Date()
			}
		},

})

(2)创建全局过滤器

Vue.filter('fmtDateFilter', function (value) {
				return  fmtDate(value);
			});

(3)HTML代码演示

<div id="app">
			<p>局部过滤器</p>
			{{msg}}
			<p>局部过滤器基本使用</p>
			{{msg | fileterA}}
			<p>局部过滤器传参使用</p>
			{{msg | fileterC(1,3)}}
			<p>全局过滤器</p>
			{{time}}<br />
			{{time | fmtDateFilter}}
		</div>

 (4)运行结果

通过运行结果我们可以发现,全局过滤器对时间进行了格式化输出页面 

4.计算属性与监听属性

4.1计算属性

计算属性用于根据依赖的数据属性计算派生的属性,这些属性可以被视为响应式的,当依赖数据变化时,计算属性会自动重新计算

(1)创建Vue实例

new Vue({
				el:"#result",
				data(){
					return{
						price:20,
						num:1
					};
				},
				computed: {
					subtotal:function() {
						return this.price* this.num 
					}
				},
			})

(2)HTML演示

<div id="result">
			<p>计算属性</p>
			单价:<input v-model="price"/>
			数量:<input v-model="num"/>
			小计:{{subtotal}}
		</div>

(3)演示效果

当我们的输入框中发生变化时,会自动计算最后的总值,通常被应用在购物车中 

4.2 监听属性

监听属性主要用于在特定数据发生变化时执行自定义的操作,例如异步请求或复杂的数据处理 

(1) Vue实例

new Vue({
				el:"#result",
				data(){
					return{
						m:1000,
						km:1
					};
				},
				watch:{
					km:function(v){
						//v指被监听的属性
						this.m = parseInt(v)*1000
					},
					m:function(v){
						this.km = parseInt(v)/1000
					}
				},
			})

(2)HTML代码

<div id="result">
			<p>计算属性</p>
			单价:<input v-model="price"/>
			数量:<input v-model="num"/>
			小计:{{subtotal}}
			<p>监听属性</p>
			米:<input v-model="m"/>
			千米:<input v-model="km"/>
		</div>

(3)演示效果

当我们的其中一个值发生变化时,另外一个绑定的值也会发生变化

4.3区别总结:

  • 监听属性适用于执行自定义的操作,通常用于响应式地处理数据变化,但不返回新的值。
  • 计算属性适用于计算派生的数据,通常返回一个新的值,当依赖数据变化时自动重新计算。
  • 计算属性的结果会被缓存,只有在依赖数据变化时才会重新计算,而监听属性没有缓存,每次数据变化都会触发回调函数。

根据您的需求,您可以选择使用监听属性或计算属性来处理组件中的数据变化。通常情况下,如果您需要派生数据或计算新的属性值,计算属性是更好的选择,而如果您需要执行一些副作用或自定义操作,监听属性更合适

 二.购物车案例

当前购物车利用计算属性,可以通过改变数量和单价,小计和总计进行相应的变化

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
	<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    <title>购物车</title>
	<style>
	        table {
	            width: 100%;
	            border-collapse: collapse;
	        }
	        table, th, td {
	            border: 1px solid black;
	        }
	        th, td {
	            padding: 10px;
	            text-align: left;
	        }
	        input[type="number"] {
	            width: 60px;
	        }
	    </style>
</head>
<body>
    <div id="app" style="text-align: center;">
        <h1 style="text-align: center;">购物车</h1>
        <div>
            <label for="item-name">商品名称:</label>
            <input type="text" id="item-name" v-model="newItemName">
            <label for="item-price">单价:</label>
            <input type="number" id="item-price" v-model.number="newItemPrice">
            <label for="item-quantity">数量:</label>
            <input type="number" id="item-quantity" v-model.number="newItemQuantity"><br><br>
            <button @click="addItem">添加到购物车</button>
        </div>
        <table>
            <thead>
                <tr>
                    <th>商品</th>
                    <th>单价</th>
                    <th>数量</th>
                    <th>小计</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                <tr v-for="(item, index) in cart" :key="index">
                    <td>{{ item.name }}</td>
                    <td><input type="number" v-model.number="item.price"></td>
                     <td>
                            <button @click="decreaseQuantity(index)">-</button>
                            <input type="number" v-model.number="item.quantity">
                            <button @click="increaseQuantity(index)">+</button>
                        </td>
                     <td>{{ item.price * item.quantity }}</td>
                    <td><button @click="removeItem(index)">移除</button></td>
                </tr>
            </tbody>
        </table>
        <p style="float: right;">总计: {{ total }}</p>
    </div>

    <!-- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14"></script> -->
    <script>
        new Vue({
            el: '#app',
            data: {
                newItemName: '',
                newItemPrice: 0,
                newItemQuantity: 0,
                cart: []
            },
            methods: {
                addItem: function() {
                    if (this.newItemName && this.newItemPrice >= 0 && this.newItemQuantity >= 0) {
                        this.cart.push({
                            name: this.newItemName,
                            price: parseFloat(this.newItemPrice),
                            quantity: parseInt(this.newItemQuantity)
                        });
                        this.newItemName = '';
                        this.newItemPrice = 0;
                        this.newItemQuantity = 0;
                    }
                },
                removeItem: function(index) {
                    this.cart.splice(index, 1);
                },
				 increaseQuantity(index) {
				        this.cart[index].quantity++;
				    },
				    decreaseQuantity(index) {
				        if (this.cart[index].quantity > 1) {
				            this.cart[index].quantity--;
				        }
				    },
            },
            computed: {
                total: function() {
                    return this.cart.reduce((acc, item) => acc + item.price * item.quantity, 0);
                }
            },
			computed: {
			    total: function() {
			        return this.cart.reduce((acc, item) => acc + item.price * item.quantity, 0);
			    }
			},
        });
    </script>
</body>
</html>

运行效果

通过创建Vue实例对数据进行实时更新,当我们在每次进行添加商品时,对应的单价与数量进行计算,每次发送变化时,小计与总计也会自动更新

今天的分享到这里就结束了,感谢各位大大的观看,各位大大的三连是博主更新的动力,感谢谢谢谢谢谢谢谢谢各位的支持!!!!! 

 

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

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

相关文章

著名书法家傅成洪在香港第八届“一带一路”高峰论坛上展示艺术与合作的融合

香港第八届“一带一路”高峰论坛于9月13日至14日在香港隆重举行&#xff0c;吸引了来自海内外的6000多名嘉宾&#xff0c;共同回顾“一带一路”倡议的历程&#xff0c;并展望未来的投资和商贸机遇。这一庆祝活动恰逢“一带一路”倡议的10周年&#xff0c;主题定为“携手十载 共…

[Python进阶] Pyinstaller打包模式

5.3 Pyinstaller打包模式 Pyinstaller将Python源码打包成程序有2种打包的方式&#xff1a; 单文件夹模式&#xff1a;指打包后将所有的程序文件放在一个文件夹内。 单文件模式&#xff1a;打包后只有一个可执行文件&#xff0c;全部的依赖文件都已经被打包进去了。 5.3.1 单文…

Linux 信号相关

int kill(pid_t pid, int sig); -功能&#xff1a;给某个进程pid 发送某个信号 参数sig可以使用宏值或者和它对应的编号 参数pid&#xff1a; >0 &#xff1b;将信号发给指定的进程 0&#xff1b;将信号发送给当前的进程组 -1&#xff1b;发送给每一个有权限接受这个信号的…

Postman应用——Variable变量设置(Global、Environment和Collection)

文章目录 Global变量设置Environment变量设置Collection变量设置Global、Environment环境变量预览 Global、Environment和Collection变量使用&#xff0c;点击查看。 Global变量设置 全局变量设置&#xff0c;作用域是所有Collection、Folder和Request&#xff0c;全局变量只有…

混淆矩阵和数据不平衡 (1/3)

一、说明 如果数据集数据不平恒&#xff0c;如何评估分类器的效果&#xff1f;如果分类器不好&#xff0c;如何改进分类器&#xff1f;本篇将讲述不平衡数据下&#xff0c;混淆矩阵的应用。 二、混淆矩阵的基本概念 2.1 连续数据分布 LET将数据视为连续的&#xff0c;分类的或有…

阿里云服务器价格更新,轻量应用服务器108元,云服务器182.04元起

阿里云服务器价格更新了&#xff0c;不同时期阿里云服务器的租用价格不同&#xff0c;目前阿里云在官网活动中新增加了一款经济型e实例规格的云服务器&#xff0c;现在购买阿里云轻量应用服务器最低为108元&#xff0c;购买云服务器最低为182.04元&#xff0c;换算到每天只要0.…

零基础学前端(四)3. 重点讲解 CSS:实战补全百度网站首页

1. 该篇适用于从零基础学习前端的小白 2. 初学者不懂代码得含义也要坚持模仿逐行敲代码&#xff0c;以身体感悟带动头脑去理解新知识 3. 初学者切忌&#xff0c;不要眼花缭乱&#xff0c;不要四处找其它文档&#xff0c;要坚定一个教授者的方式&#xff0c;将其学通透&#xff…

前端学习路线,带你入门程序猿

相信很多想学前端的小伙伴是非常迷茫的 前端知识体系很多&#xff0c;不知从何学起 而且框架也有不少&#xff0c;不知道该如何下手 很多学习前端的小伙伴都没有一个很好的学习路线图&#xff0c;简直可以说是看见啥学啥 而且自己在学习的时候非常吃力&#xff0c;感觉总是学不…

SQLite 学习笔记1 - 简介、下载、安装

SQLite 简介 SQLite是一款非常轻量级的关系数据库系统&#xff0c;支持多数SQL92标准。SQLite 是世界上使用最广泛的数据库引擎。SQLite 内置于所有手机和大多数计算机中&#xff0c;并捆绑在人们每天使用的无数其他应用程序中。 SQLite 是一个由C语音开发的嵌入式库&#xff…

DataGrip汉化

一、关闭DataGrip&#xff0c;下载新的jar包 链接&#xff1a;https://pan.baidu.com/s/1gTHpyMuIME_n8qC9KYbOzA 提取码&#xff1a;ute3 二、把下载的jar包放在lib文件里&#xff0c;把原来自带的jar替换掉 三、打开datagrip

nginx代理故障总结

一、故障现象 今天公司的某个系统文件下载功能失败&#xff0c;报错network error&#xff0c;其他功能正常。 二、故障定位 首先我们检查了公司的网络情况&#xff0c;包括网络路由、防火墙策略、终端安全产品等&#xff0c;均未发现异常。 尝试访问http://X.X.X.X:7002端口&…

uniapp——实现二维码生成+保存二维码图片——基础积累

最近在做二维码推广功能&#xff0c;自从2020年下半年到今天&#xff0c;大概有三年没有用过uniapp了&#xff0c;而且我之前用uniapp开发的程序还比较少&#xff0c;因此很多功能都浪费了很多时间去查资料&#xff0c;现在把功能记录一下。 这里写目录标题 效果图1.根据接口返…

元数据管理平台Datahub0.10.5版本安装部署与导入各种元数据手册

官网文档连接 DataHub Quickstart Guide | DataHub (datahubproject.io) 本文所选择的Python的版本为3.8.16&#xff0c;Docker版本为20.10.0&#xff0c;Datahub为0.10.5版本 python必须为3.7以上的版本。0.10.5不支持以下的版本 如果要使用web上的 添加数据源 直接调用的…

开源分布式存储系统(HDFS、Ceph)架构分析

文章目录 中间控制节点架构-HDFSNameNode节点分析DataNode节点分析SecondNameNode节点分析Client分析 完全无中心架构-CephCeph Monitor分析Ceph OSD分析Ceph Manager分析Ceph Clients分析 小结HDFS优点缺点 Ceph优点缺点 参考 中间控制节点架构-HDFS 以HDFS&#xff08; Hado…

五、点击切换、滚动切换、键盘切换

简介 通过事件改变当前展示的信息组件&#xff0c;交互的事件有点击上下切换、鼠标轮动上下切换、键盘上下键切换。欢迎访问个人的简历网站预览效果 本章涉及修改与新增的文件&#xff1a;App.vue、public 一、鼠标点击上下箭头切换 <template><div class"a…

Learn Prompt-Prompt 高级技巧:Agent的颠覆性影响

OpenAI联合创始人Andrej Karpathy在一个开发者活动上发表讲话&#xff0c;谈及了他和OpenAI对AI Agents的看法。他将过去开发 AI Agents 的困难与现在依靠新技术工具而带来的新机会进行了对比。Andrej Karpathy 认为普通人、创业者和极客在构建 AI Agents 方面相比 OpenAI 这样…

还有一天活动就开始我定好闹钟准时上线

&#xff08;整理衣服&#xff09;&#xff08;大步流星走上台&#xff09;&#xff08;拿起麦克风&#xff09;&#xff08;激情发言&#xff09;请大家&#xff08;热泪盈眶&#xff09;&#xff08;哽咽&#xff09;关注&#xff08;流泪&#xff09;&#xff08;擦眼泪&…

蓝桥杯打卡Day11

文章目录 最长上升子序列最长上升子序列II 一、最长上升子序列IO链接 本题思路:本题是一关于dp问题中的一个类型是最长上升子序列问题&#xff0c;首先我们将状态表示出来&#xff1a;f[i]表示以a[i]结尾的最大的上升序列。状态计算&#xff08;集合划分&#xff09;&#xf…

如何防盗版软件

有多少公司&#xff0c;至今都无法摆脱被盗版软件支配的恐惧&#xff1f; 其实大多数时候&#xff0c;企业都是被动当了大冤种&#xff0c;因为他们也并不会主动要求员工使用破解软件。实在是架不住有些不懂版权的、心存侥幸的员工私下里使用。只要公司联网&#xff0c;就一定…

猫头虎博主第5️⃣期赠书活动:《Java官方编程手册(第12版·Java 17)套装上下册》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…