Vue.js入门模板语法[上] 及Vue.js实现购物车---详细讲解

2023-09-19 12:40:16

前言

    前面我们学习了Vue的基础入门,接下来我们学习有关Vue的模板语法,学习Vue语法能提高我们的前端开发效率

  Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析。vue将模板编译成虚拟dom,结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少

一,插值

1.1 文本

          {{msg}}

	<body>
		<div  id="wenben">
			<h1>文本</h1>
			 {{msg}}
		</div>
		
	<script >
		new Vue({
		el:'#wenben',
		data(){
			return{
				msg:"Hello Smart!"
			}
		}
		});
	</script>

1.2 html

      使用v-html指令用于输出html代码   

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<div  id="wenben">
			 <p>html解析</p>
		      <h1 v-html="msg2"></h1>
		</div>
		
		
	<script >
		new Vue({
		el:'#wenben',
		data(){
			return {
				msg2:'<span style="color:red;">Hello Smart!</span>'
			}
		}
		});
	</script>
	</body>
</html>

1.3 属性

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	 <style>
		.f40{
			font-size: 100px;
		} 
		 
	 </style>
	
	</head>
	<body>
		<div  id="wenben">
			  <p>属性</p>
			    <h1 :class="msg3" v-html="msg2"></h1>
		</div>
		
		
	<script >
		new Vue({
		el:'#wenben',
		data(){
			return {
				  msg2:'<span style="color:red;">Hello Smart!</span>',
				   msg3:'f40'
			}
		}
		});
	</script>
	</body>
</html>

1.4 表达式

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	 <style>
		.f40{
			font-size: 40px;
		} 
		 
	 </style>
	
	</head>
	<body>
		<div  id="wenben">
			<!-- <h1>文本</h1> -->
			 <!-- {{msg1}} -->
			<!-- <p>html解析</p>
		      <h1 v-html="msg2"></h1> -->
			 <!-- <p>属性</p>
			 <h1 :class="msg3" v-html="msg2"></h1> -->
			 <!--表达式-->
			 {{num+10}},
			 {{warm.substr(9,15)}},
			 <input v-model="ok"/>
			 {{ok==1?'被打了':'不行我要还回去'}}
		</div>
		
		
	<script >
		new Vue({
		el:'#wenben',
		data(){
			return {
				// msg1:'Hello Smart!',
				// msg2:'<span style="color:red;">Hello Smart!</span>',
				   // msg3:'f40'
				   num:10,
				warm:'nishigedashuaige',
				ok:1
			}
		}
		});
	</script>
	</body>
</html>

二,指令

1.v-if&v-else&v-else-if

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>指令的使用</title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
			<div id="zz">
				<h1>v-if...的使用</h1>
				<input v-model="yanzhi"/><br/>
				<b v-if="yanzhi<60">丑男</b>
				<b v-else-if="yanzhi>=60 && yanzhi<=70">看得过去</b>
				<b v-else-if="yanzhi>70 && yanzhi<=80">小帅</b>
				<b v-else-if="yanzhi>80 && yanzhi<=90">美男子</b>
				<b v-else=" ">吴彦祖</b>
			
				
			</div>
		</body>
		<script type="text/javascript">
			// 构建vue实例 绑定边界	
			new Vue({
				el:'#zz',
				data(){
					return{
						yanzhi:60,
					}
				},
			})
		</script>
	</body>
</html>

2.v-show

与v-if类似,只是会渲染其身后表达式为false的元素,而且会给这样的元素添加css代码:style="display:none"

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>指令的使用</title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
			<div id="zz">
				<h1>v-if|v-else|v-else-if的使用</h1>
				<input v-model="yanzhi"/><br/>
				<b v-if="yanzhi<60">丑男</b>
				<b v-else-if="yanzhi>=60 && yanzhi<=70">看得过去</b>
				<b v-else-if="yanzhi>70 && yanzhi<=80">小帅</b>
				<b v-else-if="yanzhi>80 && yanzhi<=90">美男子</b>
				<b v-else=" ">吴彦祖</b>
			
				 <p v-show="yanzhi>90">>v-show-成为大神的人</p> 
				 <p v-if="yanzhi>90">v-if-成为大神的人<p>

			</div>
		</body>
		<script type="text/javascript">
			// 构建vue实例 绑定边界	
			new Vue({
				el:'#zz',
				data(){
					return{
						yanzhi:60,
					}
				},
			})
		</script>
	</body>
</html>

3 v-for

类似JS的遍历:

   遍历数组: v-for="item in items", items是数组,item为数组中的数组元素

      遍历对象: v-for="(value,key,index) in stu", value属性值,key属性名,index下标

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>指令</title>
    <!--  jQuery-->
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <!--  vue.js-->
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
</head>
<body>
<!-- 定义边界 -->
<div id="app">
    <h1>v-for的使用</h1>
    下拉框:
    <select v-model="hobbySelected">
        <option v-for="h in hobby" :value="h.id">{{h.name}}</option>
    </select><br>
    复选框:
    <div v-for="h in hobby">
        <input :value="h.id" type='checkbox'/>{{h.name}}
    </div>
</div>
</body>
<script type="text/javascript">
    // 绑定边界	
    new Vue({
        el: '#app',
        data() {
            return {
                hobby: [
                    {id: "1", name: "一杀"},
                    {id: "2", name: "二杀"},
                    {id: "3", name: "三杀"},
                    {id: "4", name: "四杀"}
                ]
            };
        }
    })
</script>
 
</html>

4 动态参数:

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

    <a v-bind:[attrname]="url"> ... </a>

   同样地,你可以使用动态参数为一个动态的事件名绑定处理函数

  <button v-on:[evname]="dt">点击事件</button>

   注1:动态参数表达式有一些语法约束,evName无效,evname有效,回避大写

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>过滤器</title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
		<!-- 定义边界 -->
			<div id="app">
				<h1>动态参数</h1>
				<input v-model="evname" />
				<button v-on:[evname]="test">点击</button>
			</div>
		<script type="text/javascript">
			// 构建vue实例 绑定边界	
			new Vue({
				el:'#app',
				data(){
					return{
					evname:'click'
				};
				},
				methods: {
					test(){
						alert("点一点更棒!");
					}
				}
			})
		</script>
</html>

三,过滤器

3.1 局部过滤器

  vue允许自定义过滤器,一般用于常见的文本格式化,过滤器可用的两个地方:双花括号插值v-bind表达式,过滤器应该被添加在js表达式的尾部,使用管道运算符 " | "

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>过滤器的使用</title>
				<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="B">
            {{msg}}<br />
			{{msg|single}}<br />
			{{msg|param(0,2)}}
		</div>
		<script type="text/javascript">
			// 绑定边界	ES6具体体现
			new Vue({
				el: '#B',
				data() {
					return {
						msg: "或许就像他们说~"
					};
				},
				filters: {
					'single': function(val) {
						return val.substring(4, 8);
					},
					'param': function(val, start, end) {
						return val.substring(start, end);
					}
				}
			})
		</script>
	</body>
</html>

3.2 全局过滤器

拷入date.js(日期格式化)放入项目js目录中,在页面中引入。
定义全局过滤器 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>全局过滤器</title>
    <!--  vue.js-->
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
 
    <script src="date.js"></script>
</head>
<body>
<!-- 定义边界 -->
<div id="B">
    <h3>全局过滤器</h3>
    {{time}}<br>
    {{time | fmtDateFilter}}
</div>
</body>
<script type="text/javascript">
    // 全局过滤器
    Vue.filter('fmtDateFilter', function (value) {
        return fmtDate(value);
    });
    // 绑定边界	ES6具体体现
    new Vue({
        el: '#B',
        data() {
            return {
                time: new Date()
            };
        }
    })
</script>
</html>

四,计算属性&监听器

4.1 计算属性

计算属性可用于快速计算视图(View)中显示的属性。这些计算将被缓存,并且只在需要时更新。

使用场景:当一个属性需要复杂的逻辑运算之后才能获取其值,可以使用计算属性,在一个计算属性中可以完成各种复杂的逻辑,包括运算,方法调用等,只要最终返回一个结果就可以了


语法:computed:{}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>计算属性</title>
    <!--  vue.js-->
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
</head>
<body>
<div id="B">
    单价:<input v-model="price">
    数量:<input v-model="num">
    总价:<input v-model="count">
</div>
</body>
<script type="text/javascript">
 
    new Vue({
        el: '#B',
        data() {
            return {
                price: 50,
                num: 1
            }
        },
        computed: {
            count: function () {
                return this.price * this.num
            }
 
        }
    })
</script>
</html>

4.2 监听器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>监听属性</title>
    <!--  vue.js-->
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
</head>
<body>
<!-- 定义边界 -->
<div id="B">
    <p>监听属性</p>
    千米:<input v-model="km"/>
    米:<input v-model="m"/>
</div>
</body>
<script type="text/javascript">
    // 绑定边界	ES6具体体现
    new Vue({
        el: '#B',
        data() {
            return {
                km: 2,
                m: 2000
            };
        },
        watch: {
            // v指的是m变量
            m: function (v) {
                this.km = parseInt(v) / 1000;
            },
            // v指的是km变量
            km: function (v) {
                this.m = parseInt(v) * 1000;
            }
        }
    })
</script>
 
</html>

五、购物车实现

购物车代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!--引入vue.js-->
 <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
<title>购物车</title>
<style>
  th, td {
    padding: 15px;
    text-align: center;
  }
</style>
</head>
<body>
<div id="B">
  <div >
    <h1>购物车</h1>
    <table width="80%" border="1"  cellspacing="1" cellpadding="1">
      <thead>
        <tr>
          <th>商品名</th>
          <th>数量</th>
          <th>单价</th>
          <th>小计</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="item in items" :key="item.id">
          <td >
            <h3 class="">{{ item.name }}</h3>
          </td>
          <td class="">
            <button @click="updatetity(item, -1)">-</button><!-- 绑定事件 -->
            <span class="quantity-label">{{ item.quantity }}</span>
            <button @click="updatetity(item, 1)">+</button>
          </td>
          <td class="">{{ item.price }}</td>
          <td>
            <p class="">{{ subtotal(item) }}</p>
          </td>
        </tr>
      </tbody>
      <tfoot>
        <tr>
          <td colspan="3"></td>
          <td>
            <p class="" colspan="4" sty>总计{{ count() }}</p>
          </td>
        </tr>
      </tfoot>
	  </center>
    </table>
	
  </div>
</div>
 
 
<script>
new Vue({
  el: '#B',
  data: {
    items: [
      { id: 1, name: '乒乓球', price: '$2',  quantity: 1 },
      { id: 2, name: '足球', price: '$109', quantity: 2 },
      { id: 3, name: '篮球', price: '$150',  quantity: 1 },
	  { id: 4, name: '羽毛球', price: '$99',  quantity: 2 },
    ]
  },
  methods: {
    updatetity(item, amount) {
      item.quantity += amount;
    },
    subtotal(item) {
      return '$' + (parseFloat(item.price.slice(1)) * item.quantity).toFixed(2);
    },
    count() {
      let total = 0;
      for (let item of this.items) {
        total += parseFloat(item.price.slice(1)) * item.quantity;
      }
      return '$' + total.toFixed(2);
    }
  }
});
</script>
</body>
</html>
更多推荐

使用ChatGPT和Blender绘制金色球的完整指南

简介:在本篇博客中,我们将了解如何结合使用ChatGPT和Blender来创建一个金色的球体。ChatGPT是OpenAI开发的强大自然语言处理模型,而Blender则是一款流行的3D建模和渲染软件。通过结合这两个工具,您可以获得详细的指导,帮助您在Blender中绘制一个逼真的金色球体。第一步:准备工作确保您已经安装

【Shell学习笔记】Bash的模式扩展

简介Shell接收到用户输入的命令以后,会根据空格将用户的输入,拆分成一个个词元(token)。然后,Shell会扩展词元里面的特殊字符,扩展完成后才会调用相应的命令。这种特殊字符的扩展,称为模式扩展(globbing)。其中有些用到通配符,又称为通配符扩展(wildcardexpansion)。Bash一共提供八种扩

LabVIEW使用巴特沃兹低通滤波器过滤噪声

LabVIEW使用巴特沃兹低通滤波器过滤噪声设备采集到的数据往往都有噪声,有时候这些数据要做判断使用,如果不处理往往会影响最终的结果。可以使用动态平滑,或者中值滤波等方法。这里介绍使用巴特沃斯低通滤波,也是非常方便的。下图是一个典型的使用巴特沃兹低通滤波的应用。Raw为含有噪声的原始数据,Filtered为过滤后的数据

Redis缓存相关问题

目录缓存穿透缓存雪崩缓存击穿Redis集群方案主从复制Replication哨兵sentinel高可用介绍Redissentinel介绍Redissentinel使用配置sentinel启动sentinel测试sentinelRedis内置集群clusterRediscluster介绍哈希槽方式分配数据Redisclu

MySQL Server层的 max_connections 和引擎层的 innodb_thread_concurrency

MySQL数据库服务端是由Server层和引擎层组成Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。存储引擎层负责数据的存储和提取。其架构模式是插件式

基于Yolov8的交通标志牌(TT100K)识别检测系统

1.Yolov8介绍UltralyticsYOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的(SOTA)模型,它建立在先前YOLO成功基础上,并引入了新功能和改进,以进一步提升性能和灵活性。它可以在大型数据集上进行训练,并且能够在各种硬件平台上运行

【算法】矩阵快速幂优化动态规划

文章目录知识讲解题目列表[矩阵快速幂]题目列表📕70.爬楼梯解法1——线性DP解法2——矩阵快速幂509.斐波那契数1137.第N个泰波那契数1220.统计元音字母序列的数目解法1——线性DP解法2——矩阵快速幂优化DP552.学生出勤记录II(🚹递归公式&矩阵快速幂优化🐂)解法1——动态规划解法2——矩阵快速幂

avformat_find_stream_info 为什么总是等到超时或超过大小才退出?

avformat_find_stream_info为什么总是等到超时或超过大小才退出?/*author:hjjdebug*date:2023年09月21日星期四11:05:56CST*description:avformat_find_stream_info为什么不能正常退出了?*/查文档:mpegts:scan_al

Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单

鸿鹄工程项目管理系统SpringCloud+SpringBoot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统1.项目背景一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的提升提出了更高的要求。二、企业通过

学信息系统项目管理师第4版系列09_配置管理

1.配置管理1.1.应用技术的和管理的指导和监控方法以标识和说明配置项的功能和物理特征,控制这些特征的变更,记录和报告变更处理和实现状态并验证与规定的需求的遵循性1.1.1.GB/T11457《信息技术软件工程术语》2.配置项2.1.ConfigurationItem,CI2.2.为配置管理设计的硬件、软件或二者的集合

停车场系统、智慧城市停车、智慧社区、物业管理、新能源充电、人脸门禁 uniapp 系统源码

1.智慧停车支持模式封闭性单个停车场路边停车(车位级管理)大小场(场中场),多场子并行或嵌套所有者模式统一平台管理总平台下子账号(区域代理)自建场地资源,自行维护数据总平台下子账号(区域代理)再分配和单个停车场管理人员(物业管理/维保/保安/财务等人员)场站管理【车位控制】精准的实时车位统计和数据及时推送到场地led/

热文推荐