Vue系列(二)之 基础语法【上篇】

news2024/11/24 6:26:06

目录

一. 插值

1.1 文本

 1.2 原始HTML

1.3 属性

1.4 表达式

二. 指令

2.1 v-if/v-else-if/v-else指令

2.2  v-show指令

2.3 v-for指令

2.4 下拉框/复选框

2.5 动态参数

 三. 过滤器

3.1 局部过滤器基本应用

3.2 局部过滤器串行使用

3.3 局部过滤器传参

3.4 全局过滤器

四. 计算属性和监听属性

4.1 计算属性

4.2 监听属性


一. 插值

1.1 文本

数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值

		<div id="app">
			<p>1.文本</p>
			{{msg}}
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return {
						msg:'今天的不开心就到此为止吧!'
					}
				}
			})
		</script>

效果:

 

 1.2 原始HTML

v-html指令会将数据中含有的标签解析后进行显示

		<div id="app">
			<p>2.原始HTML</p>
			<b v-html="msg2"></b>
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return {
						msg2:'<span style="color: red;">今天的不开心就到此为止吧!</span>'
					}
				}
			})
		</script>

效果:

 

1.3 属性

所有原生态的属性,要利用vue的变量,都要在属性前加v-bind指令

例:<b v-bind:class="xxx"></b>

可以简写为:<b :class="xxx"></b>

 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<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>
			.xx{
				font-size: 30px;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<p>2.原始HTML</p>
			<b v-html="msg2"></b>
			<p>3.属性</p>
			<b :class="msg3" v-html="msg2"></b>
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return {
						msg2:'<span style="color: red;">今天的不开心就到此为止吧!</span>',
						msg3:'xx'
					}
				}
			})
		</script>
	</body>
</html>

效果:

1.4 表达式

Vue提供了完全的js表达式支持

		<div id="app">
			<p>4.表达式</p>
			和为:{{num+1}}<br>
			{{warn.substring(0,4)}}<br>
			<input v-model="ok">
			{{ok==1?'我很开心':'我不开心'}}
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return {
						num:6,
						warn:'不许不开心!',
						ok:1
					}
				}
			})
		</script>

效果:

二. 指令

指的是带有"v-"前缀的特殊属性

2.1 v-if/v-else-if/v-else指令

根据其后表达式的boolean值进行判断是否渲染该元素,他们只能是兄弟元素

v-else-if上一个兄弟元素必须是v-if,

v-else上一个兄弟元素必须是v-if或者是v-else-if

		<div id="app">
			<p>1.v-if/v-else-if/v-else</p>
			<input v-model="score">
			<b v-if="score < 60">不及格</b>
			<b v-else-if="score >=60 && score < 70">及格</b>
			<b v-else-if="score >=70 && score < 80">中等</b>
			<b v-else-if="score >=80 && score < 90">良好</b>
			<b v-else="">优秀 </b>
			
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return {
						score:69
					}
				}
			})
		</script>

效果:

2.2  v-show指令

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

		<div id="app">
			<p>2.v-show</p>
			<b v-if="isShow">展示</b>
			<b v-show="isShow">展示</b>
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return {
						isShow:false
					}
				}
			})
		</script>

 

v-if这个标签在浏览器都不存在,v-show有html代码,只是被css样式隐藏了。

2.3 v-for指令

类似JS的遍历

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

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

		<div id="app">
			<p>3.v-for</p>
			<i v-for="a in arr">{{a}}&nbsp;&nbsp;</i><br>
			<i v-for="u in users">{{u.name}}&nbsp;&nbsp;</i><br>
			<i v-for="i,u in users">{{i}}&nbsp;&nbsp;</i>
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return {
						arr:[1,2,3,4],
						users:[{
							name:'程少商',id:1
						},{
							name:'凌不疑',id:2
						},{
							name:'许红豆',id:3
						},{
							name:'谢之遥',id:4
						}]
					}
				}
			})
		</script>

效果:

2.4 下拉框/复选框

		<div id="app">
			<p>4.下拉框/复选框</p>
			<select>
				<option v-for="h in hobbies" :value="h.id">{{h.name}}</option>
			</select>
			<div v-for="h in hobbies">
				<input type="checkbox" name="hobbies" :value="h.id">{{h.name}}
			</div>
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return {
						hobbies:[{
							name:'跑步',id:1
						},{
							name:'打游戏',id:2
						},{
							name:'唱歌',id:3
						},{
							name:'绘画',id:4
						}]
					}
				}
			})
		</script>

效果:

2.5 动态参数

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

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

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

  <a v-on:[evname]="doSomething"> ... </a>

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

		<div id="app">
			<p>5.动态参数</p>
			<input v-model="evname">
			<button v-on:[evname]="test">点我点我</button>
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return {
						evname:'click'
					}
				},
				methods:{
					test(){
						// 单击事件  双击事件
						alert('点我干嘛!!!')
					}
				}
			})
		</script>

效果:

 三. 过滤器

vue允许你自定义过滤器,被用作一些常见的文本格式化,格式如下:

<!-- 在两个大括号中 -->

{{ name | capitalize }}

<!-- 在 v-bind 指令中 -->

<div v-bind:id="rawId | formatId"></div>

注1:过滤器函数接受表达式的值作为第一个参数

注2:过滤器可以串联    

         {{ message | filterA | filterB }}

注3:过滤器是JavaScript函数,因此可以接受参数:

         {{ message | filterA('arg1', arg2) }}

3.1 局部过滤器基本应用

		<div id="app">
			<p>1.局部过滤器基本应用</p>
			{{msg}}<br>
			{{msg | filterA}}
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				filters:{
					'filterA':function(v){
						return v.substr(0,6);
					}
				},
				data(){
					return {
						msg:'今天的不开心就到此为止吧!'
					}
				}
			})
		</script>

效果:

 

3.2 局部过滤器串行使用

		<div id="app">
			<p>2.局部过滤器串行使用</p>
			{{msg}}<br>
			{{msg | filterA | filterB}}
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				filters:{
					'filterA':function(v){
						return v.substr(0,6);
					},
					'filterB':function(v){
						return v.substr(2,4);
					}
				},
				data(){
					return {
						msg:'今天的不开心就到此为止吧!'
					}
				}
			})
		</script>

 效果:

3.3 局部过滤器传参

		<div id="app">
			<p>3.局部过滤器传参</p>
			{{msg}}<br>
			{{msg | filterC(3,9)}}
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				filters:{
					'filterC':function(v,begin,end){
						return v.substr(begin,end);
					}
				},
				data(){
					return {
						msg:'今天的不开心就到此为止吧!'
					}
				}
			})
		</script>

效果:

3.4 全局过滤器

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<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>
		<script src="date.js"></script>
		<title>过滤器</title>
	</head>
	<body>
		<div id="app">
			<p>4.全局过滤器</p>
			{{time}}<br>
			{{time | all}}
		</div>
		<script type="text/javascript">
			Vue.filter('all', function(value) {
				return fmtDate(value);
			});
			new Vue({
				el:"#app",
				data(){
					return {
						msg:'今天的不开心就到此为止吧!',
						time:new Date()
					}
				}
			})
		</script>
	</body>
</html>

date.js

//给Date类添加了一个新的实例方法format
Date.prototype.format = function (fmt) {
	//debugger;
    var o = {
        "M+": this.getMonth() + 1,                 //月份
        "d+": this.getDate(),                    //日
        "h+": this.getHours(),                   //小时
        "m+": this.getMinutes(),                 //分
        "s+": this.getSeconds(),                 //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds()             //毫秒
    };
    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
};

function fmtDate(date, pattern) {
	var ts = date.getTime();
    var d = new Date(ts).format("yyyy-MM-dd hh:mm:ss");
    if (pattern) {
        d = new Date(ts).format(pattern);
    }
    return d.toLocaleString();
};

 效果:

四. 计算属性和监听属性

4.1 计算属性

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

   computed:{}

		<div id="app">
			<p>1.计算属性</p>
			单价:<input v-model="price">
			数量:<input v-model="num">
			小计:{{subtotal}}
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return {
						price:79,
						num:1
					}
				},
				computed:{
					subtotal:function(){
						return this.price * this.num;
					}
				}
			})
		</script>

效果:

4.2 监听属性

监听属性 watch,我们可以通过 watch 来响应数据的变化

   watch:{}

		<div id="app">
			<p>2.监听属性</p>
			千米:<input v-model="km" />
			米:<input v-model="m" />
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return {
						m:1000,
						km:1
					}
				},
				watch:{
					km:function(v){
						// v指的是被监听的属性km
						this.m = parseFloat(v) * 1000;
					},
					m:function(v){
						// v指的是被监听的属性m
						this.km = parseFloat(v) / 1000;
					}
				}
			})
		</script>

效果:

 

计算属性是一个变量影响另一个变量,单向影响。监听属性是双向影响。

 五. 利用Vue实现一个简单的购物车

<!DOCTYPE html>
<html>
<head>
  <title>购物车</title>
  <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>
</head>
<body>
  <div id="app">
    <h1>购物车</h1>
    <table border="0">
      <thead>
        <tr>
          <th>商品名称</th>
          <th>单价</th>
          <th>数量</th>
          <th>小计</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(item, index) in cartItems" :key="index">
          <td>{{ item.name }}</td>
          <td>{{ item.price.toFixed(2) }}</td>
          <td>
            <button @click="decreaseQuantity(index)">-</button>
            {{ item.quantity }}
            <button @click="increaseQuantity(index)">+</button>
          </td>
          <td>{{ calculateSubtotal(item).toFixed(2) }}</td>
        </tr>
      </tbody>
      <tfoot>
        <tr>
          <td colspan="3" style="float: right;">总价:</td>
          <td>{{ calculateTotalPrice().toFixed(2) }}</td>
        </tr>
      </tfoot>
    </table>
  </div>

  <script>
    new Vue({
      el: '#app',
      data: {
        cartItems: [
          { name: '爱心棉花糖', price: 3.9, quantity: 1 },
          { name: '精致小风扇', price: 29.9, quantity: 1 },
          { name: '小猪佩奇鼠标', price: 30, quantity: 1 }
        ]
      },
      methods: {
        increaseQuantity(index) {
          this.cartItems[index].quantity++;
        },
        decreaseQuantity(index) {
          if (this.cartItems[index].quantity > 1) {
            this.cartItems[index].quantity--;
          }
        },
        calculateSubtotal(item) {
          return item.price * item.quantity;
        },
        calculateTotalPrice() {
          let totalPrice = 0;
          for (let i = 0; i < this.cartItems.length; i++) {
            totalPrice += this.calculateSubtotal(this.cartItems[i]);
          }
          return totalPrice;
        }
      }
    });
  </script>
</body>
</html>

效果: 

 

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

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

相关文章

无涯教程-JavaScript - LCM函数

描述 LCM函数返回整数的最小公倍数。最小公倍数是最小的正整数,它是所有整数参数number1,number2等的倍数。使用LCM添加具有不同分母的分数。 语法 LCM (number1, [number2] ...)争论 Argument描述Required/OptionalNumber1, number2... 您想要最小公倍数的1到255个值。 如…

【JDK 8-函数式编程】4.2 BiFunction

一、BiFunction 二、改造上节课&#xff1a;四则运算 一、BiFunction Function 只能接收一个参数&#xff0c;要传递两个参数,则用 BiFunction 两个参数&#xff1a;可以是两种不同数据类型 调用方法: R apply(T t, U u); import java.util.Objects;/*** param <T>…

无涯教程-JavaScript - GCD函数

描述 GCD函数返回两个或多个整数的最大公约数。最大公约数是将number1和number2均除而无余数的最大整数。 语法 GCD (number1, [number2] ...)争论 Argument描述Required/OptionalNumber11 to 255 values. If any value is not an integer, it is truncated.Requirednumber…

颠覆传统!老子云支持70+三维格式转换,在线即可一键处理!

老子云自研AMRT展示框架及三维格式具有广泛兼容性&#xff0c;同时还会用户提供了3D格式在线转换工具&#xff0c;支持实现70三维格式模型的快速处理和转换。 你是不是也遇到过这种情况&#xff1a;做了半天的3D模型图&#xff0c;好不容易弄好了&#xff0c;到最后插入的时候居…

win11 腾讯会议提示未检测到可用麦克风

平时都用的耳机&#xff0c;今天直接用笔记本的音频进行会议&#xff0c;发现提示&#xff1a;显示未检测到可用麦克风&#xff0c;请插入设备重试&#xff1b;很奇怪的设置了腾讯会议的音频和电脑的&#xff0c;发现电脑的显示无可用的音频输入设备&#xff0c;折腾一番&#…

PYTHON第一次

1. 输入三个整数&#xff0c;按降序输出 a int(input("请输入第一个整数&#xff1a;")) b int(input("请输入第二个整数&#xff1a;")) c int(input("请输入第三个整数&#xff1a;"))nums [a, b, c] nums.sort(reverseTrue)print("…

mysql某批量更新导致死锁

#查询当前数据库全部线程show full processlist #查询当前运行的全部事务select * from information_schema.innodb_trx#查询锁情况select * from information_schema.innodb_locks#查询锁等待情况select * from information_schema.innodb_lock_waits #查看mysql设置等待锁时长…

《golang设计模式》第二部分·结构型模式-06-享元模式(Flyweight)

文章目录 1. 概述1.1角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图示例 1. 概述 享元&#xff08;Flyweight&#xff09;模式采用共享方式向客户端提供数量庞大的细粒度对象。 所谓细粒度对象&#xff0c;是指实现了业务细节并相互独立的对象。细粒度对象是一种相对概念&…

2023年中秋·国庆节放假通知

放假期间如有业务、技术及其他相关需求&#xff0c;欢迎新老客户前来咨询&#xff01;放假期间如给您带来不便敬请谅解! 注意事项 1、放假离开公司前须全面清扫所属办公区域的卫生&#xff0c;收拾好桌面、保管好个人办公物品&#xff1b; 2、关闭个人电脑等办公设备的电源&a…

MySQL DDL操作触发Metadata Lock等待,怎么办?5个高效应对策略解析!

大家好&#xff0c;我是小米&#xff0c;一个热衷于技术分享的程序员。上周三&#xff0c;有一位童鞋在 QQ 群里向我请教了一个关于“alter table 触发metadata lock一直等待”的问题&#xff0c;在今天的文章中&#xff0c;我将与大家分享一些关于MySQL数据库DDL操作中触发Met…

再获认可丨聚焦云计算标准和应用大会,畅谈边缘AI的探索实践

2023年9月13日&#xff0c;中国电子技术标准化研究院主办的第十二届云计算标准和应用大会在北京成功召开。本次大会以“标准筑基 数智创新 云端赋能 合作共赢”为主题&#xff0c;汇聚政产学研用各方专家学者&#xff0c;共享和探讨云计算标准化工作的重要进展以及云计算产业发…

实现可观测性平台的技术要点是什么?

文章目录 实现可观测性平台的技术要点是什么?兼容全域信号量所谓全域信号量有哪些&#xff1f;统一采集和上传工具统一的存储后台自由探索和综合使用数据总结 实现可观测性平台的技术要点是什么? 随着可观测性理念的深入人心&#xff0c;可观测性平台已经开始进入了落地阶段…

RecyclerView滑动时添加缩放效果

最近看到一个动画效果&#xff0c;感觉不错&#xff0c;所以动手试一试 我实现的效果 基本上是已经实现了头像无限滚动中itemview也伴随缩放效果 初步实现基本思路&#xff1a; 1、没选择用ViewPager&#xff0c;考虑到特定几张图片的循环显示和扩展我使用recyclerview 2、头…

lv5 嵌入式开发-2 exec函数族

目录 1 进程 – exec函数族 1.1 exec函数族特点 1.2 进程 – execl / execlp使用方法 1.3 进程 – execv / execvp 2 进程 – system 3 exec族要点演示 掌握&#xff1a;exec函数族、system 1 进程 – exec函数族 执行程序&#xff0c;通孔ps -elf发现&#xff0c;父进…

springcloud3 分布式事务-产生原因的模拟1

一 分布式事务 1.1 分布式事务产生条件 分布式事务&#xff0c;就是指不是在单个服务或单个数据库架构下&#xff0c;产生的事务&#xff0c;例如&#xff1a; 1.跨数据源的分布式事务 2.跨服务的分布式事务 3.综合情况 二 案例操作 2.1 原理架构 订单的创建、库存的扣…

1万多关数独逻辑游戏ACCESS\EXCEL数据库

数独盘面是个九宫&#xff0c;每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件&#xff0c;利用逻辑和推理&#xff0c;在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次&#xff0c;所以又称“九宫格”。 每一关存储了8…

【树】B树与B+树

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

计算机视觉与深度学习-经典网络解析-VGG-[北邮鲁鹏]

目录标题 VGG参考VGG网络贡献使用尺寸更小的$3 \times 3$卷积串联来获得更大的感受野放弃使用$11 \times 11$和$5 \times 5$这样的大尺寸卷积核深度更深、非线性更强&#xff0c;网络的参数也更少&#xff1b;去掉了AlexNet中的局部响应归一化层(LRN)层。 网络结构主要改进输入…

车辆检测:An Efficient Wide-Range Pseudo-3D Vehicle Detection Using A Single Camera

论文作者&#xff1a;Zhupeng Ye,Yinqi Li,Zejian Yuan 作者单位&#xff1a;Xian Jiaotong University 论文链接&#xff1a;http://arxiv.org/abs/2309.08369v1 项目链接&#xff1a;https://www.youtube.com/watch?v1gk1PmsQ5Q8 内容简介&#xff1a; 1&#xff09;方…

GE D20 EME 10BASE-T 控制主板模块

GE D20 EME 控制主板模块通常用于工业自动化和控制系统中&#xff0c;特别是在需要网络连接和通信功能的应用领域。以下是一些可能适用于该模块的应用领域&#xff1a; 工业自动化&#xff1a;GE D20 EME 控制主板模块可用于各种工业自动化应用&#xff0c;包括生产线控制、设备…