当前位置: 首页 > news >正文

Vue - 插值 - 指令 - 过滤器 - 计算属性与监听属性 - 购物车案例

目录

一、Vue的插值标签

        1.1 《v-html页面转义》

        1.2 《v-bind绑值》

        1.3 《vue中可以对变量进行二次处理》

        1.4 《Class绑定》

        1.5 《Style绑定》

二、Vue的指令

        2.1 Vue所用数据

        2.2《v-if》与 《v-show》的区别

        2.3《v-for》的使用

三、Vue过滤器

        3.1 定义要用到的数据

        3.2 定义过滤器

        3.3 过滤器串联

        3.4 过滤器传参

四、计算属性与监听属性

        4.1 计算属性

        4.2 监听属性

五、购物车案例

        5.1 购物车案例代码

        5.2 测试


一、Vue的插值标签

最基础的其实就是文本的输出,这一个在Leaf昨天的文章里面就已经使用过了;

今天这里就一笔带过啦;

包括关于vue的使用什么的Leaf也都在昨天的文章里面说过了,今天就直接统一来直接使用。

        1.1 《v-html页面转义》

                如果当我们想插入一段html代码时,如果不进行转义的话就会原样输出;

<div id="app">
    <p>《文本》</p>
    {{msg}}
    <p>《v-html页面转义》</p>
    <div v-html="htmlstr"></div>
</div>
<script type="text/javascript">
    new Vue({
        el:'#app',
        data(){
            return {
                msg:'hello vue!!!',
                htmlstr:'<span style="color:red;">文本内容</span>'
            }
        }
    })
</script>

转义后:

为了节省不必要的阅读时间,我就不在每一个标签后面都放上运行后的效果图了;

都是一样的使用步骤:

① 先在Vue实例里面定义好数据;

② 再在边界div里添加对应的标签使用。

这里放上插值的Vue实例里定义的所有数据:

<!-- 后面要用到的样式 -->
<style>
    .a{
color: deeppink;
    }
</style>
<!-- 插值要用到的所有数据 -->
<script type="text/javascript">
new Vue({
    el:'#app',
    data(){
    return {
    msg:'hello vue!!!',
    htmlstr:'<span style="color:red;">文本内容</span>',
    valuestr:'vue值',
    str:'hello ward',
    num:9,
    ok:false,
    idstr:'book_',
    classStr:'a',
    styleStr:'color:red'
    }
    }
})
</script>

        1.2 《v-bind绑值》

<p>《v-bind绑值》</p>
<input v-bind:value="valuestr"/>
<input :value="valuestr"/>

        1.3 《vue中可以对变量进行二次处理》

<p>《vue中可以对变量进行二次处理》</p>
{{str.substring(0,4)}} <br />
{{num + 2}} <br />
{{ok ? '7' : '0'}} <br />

        1.4 《Class绑定》

<p>《Class绑定》</p>
<span :class="classStr">文本内容</span>

        1.5 《Style绑定》

<p>《Style绑定》</p>
<span :style="styleStr">文本内容</span>

二、Vue的指令

        2.1 Vue所用数据

                这里和前面一样,先放上指令要用到的所有数据;

<script type="text/javascript">
new Vue({
    el:'#app',
    data(){
return {
score:0,
showflag:false,
likes:[
{id:1,name:'摄影'},
{id:2,name:'绘画'},
{id:3,name:'看书'},
{id:4,name:'篮球'}
]
}
    }
})
</script>

        2.2《v-if》与 《v-show》的区别

  我们首先要来使用一下这两个指令;

<p>《v-if》</p>
<!-- 输入分数:60以下为不及格,60-70为合格,70-80为良好,80-90为优秀,90以上为特别优秀 -->
请输入分数:<input v-model="score"/>
对应的结果:
<span v-if="score<60">不及格</span>
<span v-else-if="score<70">合格</span>
<span v-else-if="score<80">良好</span>
<span v-else-if="score<90">优秀</span>
<span v-else-if="score<=100">特别优秀</span>
<span v-else="">输入不合法</span>

运行测试成功;

不及格:

及格:

优秀:

接着我们再来使用一下v-show;

<p>《v-show》</p>
请输入结果:<input v-model="showflag"/>
<span v-show="showflag">show:展示与否</span>
<span v-if="showflag">if:展示与否</span>

输入的是true,标签就显示,反之则不显示。

而我们正是可以通过这个来区分v-if 与 v-show 的区别;

我们输入false,然后按下F12查看一下代码:

我们发现只有使用v-show的span标签是存在的,它是利用display:none把标签隐藏了;

而v-if则是直接没有了;

这就是v-if 与 v-show 的区别。

        2.3《v-for》的使用

                这个标签有点细节,在下拉框和复选框的使用中可以体现出来;

<!-- 下拉框 -->
<select>
<option v-for="l in likes" :value="l.id">{{l.name}}</option>
</select>
<br /><br /><br /><br /><br />
<!-- 复选框 -->
<div v-for="l in likes">
<input type="checkbox" :value="l.id"/>{{l.name}}
</div>

 注意一下:下拉框是要将v-for写在中的;而复选框则是要在标签的外面再定义一个div标签、并且把v-for写到这个div标签中的,否则会报错。


三、Vue过滤器

        3.1 定义要用到的数据

<script type="text/javascript">
    new Vue({
        el:'#app',
        data(){
        return {
    msg:'hello vue!!!'
        }
    }
})
</script>

        3.2 定义过滤器

                我们一般就是使用全局过滤器,编写一个过滤器:

<script type="text/javascript">
    Vue.filter('strSplit',function(value){
        console.log(value);
        return value;
    })
</script>

我们可以发现过滤器中的value就是Vue实例中定义的值,可以对其进行过滤操作。

我们对value进行截取;

Vue.filter('strSplit',function(value){
    console.log(value);
    return value.substring(0,5);
})
<p>《全局过滤器》</p>

{{msg|strSplit}}

 运行测试:

        3.3 过滤器串联

                同时过滤器还可以叠加进行使用;我们再次定义一个过滤器,在里面打个debugger断点,打印第二个过滤器的value值:

<p>《全局过滤器》</p>
<!-- 过滤器的串联 -->
{{msg|strSplit|strSplit2}}
<script type="text/javascript">
Vue.filter('strSplit',function(value){
console.log(value);
return value.substring(0,5);
})
Vue.filter('strSplit2',function(value){
console.log(value);
return value.substring(0,5);
})

我们就可以发现,第二个过滤器打印的value值就是第一个过滤器执行过滤操作后的值;

这就是过滤器的串联。

        3.4 过滤器传参

                是的,过滤器也可以传参,就这样写:

Vue.filter('strSplit3',function(value,a,b){
    console.log(value);
    return value.substring(a,b);
})

                在边界中使用:

<!-- 过滤器传参 -->
{{msg|strSplit3(2,5)}}
<br />
{{msg|strSplit3(6,9)}}

         测试:传参使用成功


四、计算属性与监听属性

        4.1 计算属性

                我们先放上需要用到的数据,同时加上计算属性的模块:

<script type="text/javascript">
    new Vue({
        el:'#app',
        data(){
        return {
        x:0,
        y:0,
        km:0,
        m:0
        }
    },
    computed:{
        //计算属性
        addFlag:function(){
            return parseInt(this.x) + parseInt(this.y)
        }
    }
</script>

        在边界中使用:

<p>《计算属性》</p>
请输入第一个数:<input v-model="x"/><br />
请输入第二个数:<input v-model="y"/><br />
结果为:{{addFlag}}

         测试结果:

我们不断的改变输入的值,结果都会随着我们输入的值进行更新,

也就是输入框的单个影响。

        4.2 监听属性

                而监听属性又不一样,他是两个输入框互相影响;

                我们加入监听的模块:

watch:{
    <!-- 定义km与m两个输入框的函数 --> 
    km:function(v){
    //:之前的km对应的是被监听的属性,v指的是被监听属性的值
    //当v对应的值发生变化的时候,会执行这个方法
    //v代表千米 this.v != v
    this.m = parseInt(v)*1000
    },
    m:function(v){
    //v代表米
    this.km = parseInt(v)/1000
    }
}

         在边界中使用:

<p>《监听属性》:相互影响</p>
请输入千米:<input v-model="km"/><br />
请输入米:<input v-model="m"/><br />

        测试结果:


五、购物车案例

        5.1 购物车案例代码

<!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>
	</head>
	<body>
		<div id="app">
			<p>《计算属性》</p>
			请输入第一个数:<input v-model="x"/><br />
			请输入第二个数:<input v-model="y"/><br />
			结果为:{{addFlag}}
			<p>《监听属性》:相互影响</p>
			请输入千米:<input v-model="km"/><br />
			请输入米:<input v-model="m"/><br />
			<p>《购物车案例》</p>
			<table>
				<tr>
					<td>物品</td>
					<td>单价</td>
					<td>数量</td>
					<td>小计</td>
				</tr>
				<tr>
					<td>洗面奶</td>
					<td>
						{{ximiannaiDj}}
					</td>
					<td>
						<input v-model="ximiannaiSl"/>
					</td>
					<td>
						{{xXj}}
					</td>
				</tr>
				<tr>
					<td>面膜</td>
					<td>
						{{mianmoDj}}
					</td>
					<td>
						<input v-model="mianmoSl"/>
					</td>
					<td>
						{{mXj}}
					</td>
				</tr>
				<tr>
					<td>水乳</td>
					<td>
						{{shuiruDj}}
					</td>
					<td>
						<input v-model="shuiruSl"/>
					</td>
					<td>
						{{sXj}}
					</td>
				</tr>
				<tr>
					<td>总价:</td>
					<td colspan="3">
						{{sum}}
					</td>
				</tr>
			</table>
		</div>
	</body>
	<script type="text/javascript">
		new Vue({
			el:'#app',
			data(){
				return {
					x:0,
					y:0,
					km:0,
					m:0,
					ximiannaiDj:108,
					mianmoDj:89,
					shuiruDj:258,
					ximiannaiSl:1,
					mianmoSl:1,
					shuiruSl:1
				}
			},
			computed:{
				//计算属性
				addFlag:function(){
					return parseInt(this.x) + parseInt(this.y)
				},
				//因为数量会影响小计,小计不会影响数量,所以使用计算属性
				xXj:function(){
					return parseInt(this.ximiannaiDj) * parseInt(this.ximiannaiSl)
				},
				mXj:function(){
					return parseInt(this.mianmoDj) * parseInt(this.mianmoSl)
				},
				sXj:function(){
					return parseInt(this.shuiruDj) * parseInt(this.shuiruSl)
				},
				sum:function(){
					return parseInt(this.xXj) + parseInt(this.mXj) + parseInt(this.sXj)
				}
			},
			watch:{
				km:function(v){
					//:之前的km对应的是被监听的属性,v指的是被监听属性的值
					//当v对应的值发生变化的时候,会执行这个方法
					//v代表千米 this.v != v
					this.m = parseInt(v)*1000
				},
				m:function(v){
					//v代表米
					this.km = parseInt(v)/1000
				}
			}
		})
	</script>
</html>

        5.2 测试

                运行测试:

小计和总价会随着数量的变化从而不断的跟着更新!

相关文章:

  • 自己的思考
  • 电脑无线5g网卡发现不了网件R7000的Wifi 5g网络
  • 刷题记录:牛客NC201628纸牌游戏
  • 线性表与链表的详解
  • 常量指针、指针常量,指针数组、数组指针,函数指针、指针函数
  • java基于ssm+vue+elementui楼盘房屋销售系统 前后端分离
  • FastAPI 学习之路(三十三)操作数据库
  • 网络技术-Cisco路由器
  • 【halcon案例01 】金属工件几何测量
  • 第十章Redis_主从复制
  • 牛客 NC24858 [USACO 2009 Nov S]Job Hunt
  • 687 最长同值路径——Leetcode 天天刷(2022.9.2)【DFS】
  • 新店速递丨白玉兰(商务)酒店赣榆吾悦广场店 正式上线
  • Windows 10 安装 Redis
  • java基于springboot+vue+elementui的漫画投稿交流平台 前后端分离
  • 《深入 React 技术栈》
  • avalon2.2的VM生成过程
  • Cookie 在前端中的实践
  • CSS实用技巧干货
  • ES6--对象的扩展
  • java 多线程基础, 我觉得还是有必要看看的
  • Java编程基础24——递归练习
  • Redis 懒删除(lazy free)简史
  • Web设计流程优化:网页效果图设计新思路
  • 关于字符编码你应该知道的事情
  • 简单基于spring的redis配置(单机和集群模式)
  • 前端技术周刊 2019-01-14:客户端存储
  • 前端之Sass/Scss实战笔记
  • 前嗅ForeSpider采集配置界面介绍
  • 设计模式(12)迭代器模式(讲解+应用)
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 云大使推广中的常见热门问题
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #Spring-boot高级
  • #微信小程序:微信小程序常见的配置传旨
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (39)STM32——FLASH闪存
  • (Note)C++中的继承方式
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (七)Knockout 创建自定义绑定
  • **CI中自动类加载的用法总结
  • *2 echo、printf、mkdir命令的应用
  • .mysql secret在哪_MySQL如何使用索引
  • .NET Core 通过 Ef Core 操作 Mysql
  • .Net Core和.Net Standard直观理解
  • .NET 设计模式初探
  • .net 中viewstate的原理和使用
  • .NET6 命令行启动及发布单个Exe文件
  • .net6Api后台+uniapp导出Excel
  • .net分布式压力测试工具(Beetle.DT)