Vue系列(二)之 基础语法上篇【插值,指令,过滤器,计算属性监听属性】以及购物车实现

目录

一. 插值

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指的是被监听的属性kmthis.m = parseFloat(v) * 1000;},m:function(v){// v指的是被监听的属性mthis.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.mzph.cn/news/86553.shtml

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

相关文章

QT学习之创建项目

1、添加快捷键到桌面 找到所在安装路径Qt5.14.1\Tools\QtCreator\bin添加至桌面 双击后打开 2、创建项目 点击下一步 再点击下一步 下一步 当前暂时选择32位&#xff0c;之后点击完成 3、进入编辑页面并运行 运行快捷键&#xff1a;CtrlR 运行界面点击按钮&#xff1a; 运行…

单臂路由的详细配置步骤

1、单臂路由概述 单臂路由&#xff08;router-on-a-stick&#xff09;是指在路由器的一个接口上通过配置子接口&#xff08;或“逻辑接口”&#xff0c;并不存在真正物理接口&#xff09;的方式&#xff0c;实现原来相互隔离的不同VLAN&#xff08;虚拟局域网&#xff09;之间…

C++笔记之引用折叠规则

C笔记之引用折叠规则 文章目录 C笔记之引用折叠规则1. 当两个左值引用结合在一起时&#xff0c;它们会折叠成一个左值引用。2. 当一个左值引用和一个右值引用结合在一起时&#xff0c;它们会折叠成一个左值引用。3. 当两个右值引用结合在一起时&#xff0c;它们也会折叠成一个右…

【网络协议】Http-上

Http请求结构&#xff1a; 结构图1&#xff1a; 实验解析请求报文&#xff1a; 1.在Edge浏览器上输入ip地址端口号文件资源&#xff0c;也就是下图中的120.XX.139.29:8888/A/B/c.html 2.我的程序接收到了一个没有有效载荷的http请求(呼应上面的结构图1)&#xff0c;如下 GET …

Python机器学习实战-特征重要性分析方法(1):排列重要性(附源码和实现效果)

实现功能 排列重要性 PermutationImportance&#xff1a;该方法会随机排列每个特征的值&#xff0c;然后监控模型性能下降的程度。如果获得了更大的下降意味着特征更重要 实现代码 from sklearn.datasets import load_breast_cancer from sklearn.ensemble import RandomFore…

C语言之字符函数字符串函数篇(2)

目录 字符串查找 strstr strstr的使用 strstr的模拟实现 分析 考虑点 代码 strt strtok的使用 循环改进 错误信息报告 strerror 错误码的错误信息 strerror的使用 perror 字符操作 字符分类函数 字符转化函数 今天我们接着讲字符串函数&#xff0c;也…

balenaEtcher格式化的U盘恢复原来样子

今天用balenaEtcher烧录了U盘&#xff0c;刷机N1盒子openwrt, 刷完机结果发现自己的U盘电脑最后只有167M 想要恢复原来的64G以下是方法&#xff0c;使用win10系统 1、打开命令行cmd&#xff08;winr打开运行&#xff0c;在其中输入cmd就可以打开&#xff09;&#xff1b; 2…

C++QT day11

绘制时钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent>//绘制事件类 #include <QDebug>//信息调试类 #include <QPainter>//画家类 #include <QTimer>//定时器类 #include <QTime> #include &…

Android---打开相机拍照

简单实现打开系统系统相机拍一张图片并显示在UI上&#xff0c;适用与个人主页头像的切换。 1. 添加权限。AndroidManifest.xml里添加使用相机的权限。 <uses-permission android:name"android.permission.CAMERA"/> 2. 布局。布局内容比较交单&#xff0c;一…

leetcode21合并两个有序链表

题目&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输…

智慧农业农场小程序源码 智慧农场系统源码

智慧农业农场小程序源码 智慧农场系统源码 一、 智慧农场系统的组成 智慧农场系统一般包括传感器、控制器、数据采集与处理平台、应用软件等组成部分。其中, 传感器主要用于采集土壤温度、湿度、光照强度等环境参数,以及作物生长状态、水肥情况等生产信息。控制器则根据传感器…

一个关于 i++ 和 ++i 的面试题打趴了所有人

前言 都说大城市现在不好找工作&#xff0c;可小城市却也不好招人。 我们公司招了挺久都没招到&#xff0c;主管感到有些心累。 我提了点建议&#xff0c;是不是面试问的太深了&#xff0c;在这种小城市&#xff0c;能干活就行。 他说自己问的面试题都很浅显&#xff0c;如果答…

你写过的最蠢的代码是?

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Parseval’s Theorem Parseval’s Identity of Fourier Transform

https://www.tutorialspoint.com/parseval-s-theorem-and-parseval-s-identity-of-fourier-transform

最新AI创作系统+ChatGPT网站源码+支持GPT4.0+支持ai绘画+支持国内全AI模型

一、AI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统&#xff1f;小编这里写一个详细图文教程吧&#x…

Unity引擎更新收费模式:从收入分成转向游戏安装量,将会有哪些影响呢

一、前言 Unity 引擎宣布自 2024 年 1 月 1 日起&#xff0c;将根据游戏安装量对开发者进行收费。官网通知如下 收费模式如图 这张图的大致意思就是&#xff0c; 从2024年1月1日开始&#xff0c;Unity将对所有达标的用户&#xff08;开发者&#xff09;根据游戏安装量征收“安…

ARM Linux DIY(十三)Qt5 移植

前言 板子带有屏幕&#xff0c;那当然要设计一下 GUI&#xff0c;对 Qt5 比较熟悉&#xff0c;那就移植它吧。 移植 Qt5 buildroot 使能 Qt5&#xff0c;这里我们只开启核心功能 gui module --> widgets module 编译 $ make ODIY_V3S/ qt5base编译报错&#xff1a;找不…

Windows11系统C盘用户文件夹下用户文件夹为中文,解决方案

说明&#xff1a; 1. 博主电脑为Windows11操作系统&#xff0c;亲测有效&#xff0c;修改后无任何影响&#xff0c;软件都可以正常运行&#xff01; 2. Windows10系统还不知道可不可行&#xff0c;因为Windows11的计算机管理中没有本地用户和组&#xff0c;博主在csdn上看到很…

【斗罗2】霍雨浩实力被否定,超级斗罗眼光被嘲,魂导院成功捡漏

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析斗罗大陆2绝世唐门。 最新一集《绝世唐门》已经更新&#xff0c;相信不少小伙伴和小郑一样都已经先睹为快&#xff0c;本集虽然是过渡剧情&#xff0c;但本身还是有不少有意思的剧情&#xff0c;作为过渡文戏也算是可圈可…