“Vue进阶:深入理解插值、指令、过滤器、计算属性和监听器“

2023-09-19 11:34:58

引言:

Vue.js是一款流行的JavaScript框架,它提供了许多强大的功能来简化前端开发。在本篇博客中,我们将深入探讨Vue的一些高级特性,包括插值、指令、过滤器、计算属性和监听器。通过理解和灵活运用这些功能,我们可以更好地构建出丰富、高效的Vue应用程序。

Vue的插值

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title></title>
		<style>
			.font-30{
				font-size: 30px;
			}
		</style>
	</head>
	<body>
		<div id = "app">
			{{msg}}<br /><hr />
			html,class绑定-------<b :class="msg3" v-html="msg2"></b><br /><hr />
			表达式----<br />
			{{num+1}}<br />
			{{str.substring(2,4)}}<br />
			<input v-model="ok" />
			{{ok==true?'yes':'no'}}<br /><hr />
		</div>
		<script>
			new Vue({
				el:"#app",
				data(){
					return{
						msg:'hello vue',
						msg2:'<span style="color:red">msg2样式</span>',
						msg3:'font-30',
						num:6,
						str:'沉谭秋叶',
						ok:true
					}
				}
			})
		</script>
	</body>
</html>

在这里插入图片描述

Vue的指令

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title></title>
		<style>
			.font-30{
				font-size: 30px;
			}
		</style>
	</head>
	<body>
		<div id = "app">
			<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>
			<br /><hr />
			v-show
			<b v-show="isShow">xxx</b>
			<br /><hr />
			v-for
			<b v-for="i in arr">{{i}}-</b>
			<b v-for="i in arrs">{{i.name}}-{{i}}=</b>	<br /><hr />
			<select>
				<option>请选择</option>
				<option v-for="i in arrs" :value="i.id">{{i.name}}</option>
			</select>
			<br /><hr />
			<div v-for="i in arrs"> 
				<input type="checkbox" name="hobby" :value="i.id" />{{i.name}}
			</div>
			<br /><hr />
			<input v-model="evename"/>
			<button v-on:[evename]="text">点击</button>
		</div>
		<script>
			new Vue({
				el:"#app",
				data(){
					return{
						score:69,
						isShow:false,
						arr:['a','b','c','d'],
						arrs:[{name:'小王',id:1},{name:'小李',id:2},{name:'小桂',id:3},{name:'小勇',id:4}],
						evename:'click'
					}
				},methods:{
					text(){
						alert('点击了!!')
					}
				}
			})
		</script>
	</body>
</html>

在这里插入图片描述

Vue的过滤器

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="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">
			{{msg}}<br>
			
			{{msg | filter1}} <br>
			{{msg | filter1 | filter2}}<br>
			{{msg | filter3(3,7)}}<br>
			<hr>
			{{time}}<br>
			{{time | filterName}}
		</div>
		<script>
			Vue.filter('filterName', function (value) {
			 // value 表示要过滤的内容
			 return fmtDate(value);
			});

			new Vue({
				el:"#app",
				filters:{
					'filter1':function(v){
						return v.substring(0,5)
					},
					'filter2':function(v){
						return v.substring(1,3)
					},
					'filter3':function(v,begin,end){
						return v.substring(begin,end)
					}
				},
				data(){
					return{
						msg:'允许你自定义过滤器,被用作一些常见的文本格式化,格式如下',
						time:new Date()
					}
				}
			})
		</script>
	</body>
</html>

在这里插入图片描述

Vue的计算属性和监听器

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title></title>
		<style>
			.font-30{
				font-size: 30px;
			}
		</style>
	</head>
	<body>
		<div id = "app">
			{{msg}}<br /><hr />
			单价<input v-model="price"/>
			数量<input v-model="num"/>
			小计{{count}}
			<br />
			千米<input v-model="km"/><br /><input v-model="m"/>
		</div>
		<script>
			new Vue({
				el:"#app",
				data(){
					return{
						msg:'hello vue',
						price:88,
						num:1,
						m:1000,
						km:1
					}
				},computed:{
					count:function(){
						return this.price*this.num
					}
				},watch:{
					km:function(v){
						 this.m = parseInt(v)*1000;
					},
					m:function(v){
						 this.km = parseInt(v)/1000;
					}
				}
			})
		</script>
	</body>
</html>

在这里插入图片描述
data.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();
};

vue购物车案例

<!DOCTYPE html>
<html>
<head>
  <title>购物车</title>
  <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
  <style>
    table {
      border-collapse: collapse;
      width: 100%;
    }

    th, td {
      border: 1px solid black;
      padding: 8px;
      text-align: left;
    }

    th {
      background-color: #f2f2f2;
    }

    .btn-group {
      display: flex;
      justify-content: space-between;
    }
  </style>
</head>
<body>
  <div id="app">
    <h1>购物车</h1>
    <table>
      <thead>
        <tr>
          <th>商品</th>
          <th>价格</th>
          <th>数量</th>
          <th>小计</th>
          <th>操作</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="v in arr" >
          <td>{{ v.name }}</td>
          <td>{{ v.price }}</td>
          <td>
            <input type="number" v-model="v.quantity" @input="xj(v)">
          </td>
          <td>{{ v | filter1 }}</td>
          <td class="btn-group">
            <button @click="add(v)">+</button>
            <button @click="jdd(v)">-</button>
          </td>
        </tr>
      </tbody>
      <tfoot>
        <tr>
          <td colspan="3">总计</td>
          <td>{{ total }}</td>
        </tr>
      </tfoot>
    </table>
  </div>

  <script>
    new Vue({
      el: '#app',
      data: {
        arr: [
          { name: '尿不湿', price: 49, quantity: 1, subtotal: 49 },
          { name: '狼牙棒', price: 28, quantity: 1, subtotal: 28 },
          { name: '鸡毛卷', price: 36, quantity: 1, subtotal: 36 }
        ]
      },
      computed: {
        total: function() {
          return this.arr.reduce((sum, v) => sum + v.subtotal, 0);
        }
      },
      methods: {
        xj: function(v) {
          v.subtotal = v.price * v.quantity;
        },
        add: function(v) {
          v.quantity++;
          this.xj(v);
        },
        jdd: function(v) {
          if (v.quantity > 0) {
            v.quantity--;
            this.xj(v);
          }
        }
      },
      filters: {
        'filter1': function(v) {
          return v.price * v.quantity;
        }
      }
    });
  </script>
</body>
</html>

在这里插入图片描述

总结:

通过本篇博客的学习,我们深入理解了Vue的插值、指令、过滤器、计算属性和监听器这些高级特性。这些功能不仅可以帮助我们更好地处理数据绑定和DOM操作,还能提升应用程序的性能和开发效率。在实际项目中,我们应根据具体需求合理运用这些功能,以构建出饱满、高效的Vue应用程序。

更多推荐

GO编程实践:如何高效使用变量

GO语言是一种强类型、静态编译的编程语言,它具有简洁的语法和强大的并发支持。在GO语言中,变量的定义和使用是非常重要的基本概念之一。下面是关于如何在GO语言中定义变量的详细说明,使用Markdown格式呈现:GO语言变量定义在GO语言中,变量的定义涉及到两个关键步骤:声明和初始化。首先,我们需要声明变量的类型,然后可以

MyBatis核心配置文件解析: 一步步深入理解mybatis-config.xml

😀前言在进行MyBatis项目开发时,合理和高效的配置是确保项目顺利进行的基础。其中,mybatis-config.xml配置文件扮演着极其重要的角色,它包含了MyBatis运行时的各种必要配置信息,如数据库连接属性、事务管理器配置、别名配置等。.提供了一份详细的mybatis-config.xml配置文件解析,一步

Go语言开发环境搭建指南:快速上手构建高效的Go开发环境

Go官网:https://go.dev/dl/Go语言中文网:https://studygolang.com/dl下载Go的语言包进入官方网站Go官网或Go语言中文网:选择下载对应操作系统的安装包:等待下载完成:安装Go的语言包双击运行上一步下载好的Go语言包,点击【Next】:勾选【Iacceptthetermsin

深入了解接口测试:方法、工具和关键考虑因素(一)

接口测试是软件测试中的一项重要工作,它涉及到系统与系统之间的交互点。接口可以是外部接口,也可以是内部接口,包括上层服务与下层服务接口以及同级接口。在接口测试中,我们需要确保接口能够按照预期的方式进行通信和交互,并且能够正确处理输入和输出数据。什么是接口?接口是具有特定输入和输出的一套逻辑处理单元,它不需要了解内部的实现

蓝牙核心规范(V5.4)10.7-BLE 入门笔记之L2CAP

1.概述ATT属性用于两个设备,一个扮演客户端的角色,另一个扮演服务器的角色。服务器公开一系列称为属性的复合数据项。这些属性由服务器按索引列表组织在称为属性表的列表中。每个属性包含一个句柄、一个通用唯一标识符(UUID)、一个值和一组权限。句柄是一个唯一的索引值,ATT客户端可以使用该值来引用属性表中的特定条目。UUI

四川百幕晟科技:提升店铺质量方法是什么?

抖店是抖音旗下的移动电子商务平台,为商家提供在线销售和促销的机会。在抖店,经验值是商家评价和信誉的重要指标之一。反映了平台上商户的服务质量和用户满意度。那么,如何查看自己在抖店手机上的体验分数呢?1、如何查看抖店手机的体验分?1、打开抖音APP:首先,商户需要打开抖音手机APP,登录抖音账号。2.进入“我的”页面:在抖

李开复:我家的AI是坠吼的

创新工场董事长、鸿海独立董事李开复,近日出席鸿海股东会暨媒体记者会时表示,人工智能(AI)是人类史上即将面临的最伟大技术革命,未来十年的改变将改写人类历史、重构所有产业,其发展大致可分三阶段,并看好鸿海在当中软硬件整合方面的优势,非常有机会成为AI相关领域顶尖领导者。李开复所提到的AI发展三阶段,第一波是纯软件将大数据

SpringMVC之JSON返回&异常处理机制

目录一.JSON1.1.介绍1.2.SpringMVC之JSON数据返回1.2.1.导入依赖1.2.2.配置spring-mvc.xml1.2.3.@ResponseBody注解使用1.2.4.常用注解二.统一异常处理2.1.为什么要全局异常处理2.2.异常处理思路2.2.异常处理方式一2.3.异常处理方式二2.4.异

驱动开发--汇总

一,【驱动相关概念】1,什么是驱动能够驱使硬件实现特定功能的软件代码根据驱动程序是否依赖于系统内核将驱动分为裸机驱动和系统驱动2,逻辑驱动和系统驱动的区别裸机驱动:编写的驱动代码中没有进行任何内核相关API的调用,开发者自己配置寄存器完成了相关硬件控制的代码编写。裸机驱动不依赖于系统内核,由开发者独立即可完成,但是裸机

【Vue】轻松理解数据代理

hello,我是小索奇,精心制作的Vue教程持续更新哈,想要学习&巩固&避坑就一起学习叭~Object定义配置方法代码引出数据代理,先上代码,后加解释<!DOCTYPEhtml><html><head><metacharset="UTF-8"/><title>回顾Object.defineproperty方法</tit

Python程序设计实例 | 学生管理数据库系统的开发

本文将通过一个学生管理数据库系统的开发过程来展示如何系统地基于Python实现SQLite数据库编程。以下首先提出数据库系统的基本结构,以及如何通过SQLite逐步达到这些要求并进行常规操作。01、数据表结构该学生管理数据库系统包括4张表:专业表、学生表、课程表和成绩表,用于实现对专业信息、学生信息、课程信息和成绩的综

热文推荐