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

Vue模板语法(01)

目录

一、插值

二、指令

三、过滤器

四、计算属性与监听属性

 五、购物车案例


一、插值

①、文本

语法:{{定义的变量}}

②、html

语法:

v-html="定义的变量"

③、属性绑定

语法:

<!-- 方法一 -->
v-bind:value="定义的变量"
<!-- 方法二 -->
:value="定义的变量"

④、表达式

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

⑤、class绑定

语法:

:class="定义的变量"

⑥、style绑定

语法:

:style="定义的变量"

代码:

<!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>
			.a{
				color:yellow;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<p>文本</p>
			{{msg}}
			<hr />
			<p>html页面转义</p>
			<div v-html="htmlstr"></div>
			<hr />
			<p>v-bind 属性绑定</p>
			<input value="值"/>
			<input v-bind:value="valuestr"/>
			<input :value="valuestr"/>
			<hr />
			<p>vue中可以对变量进行二次处理</p>
			{{str.substring(0,4)}} <br />
			{{num+4}}<br />
			{{ok ? '1' : '0'}}<br />
			<span :id="idstr+'1'">书籍信息</span>
			<hr />
			<p>class绑定</p>
			<span :class="calssStr">文本内容</span>
			<hr />
			<p>style绑定</p>
			<span :style="styleStr">文本内容</span>
		</div>
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return{
						//文本
						msg:'你好啊 云鹤衫!!',
						//html转义
						htmlstr:'<span style="color:red;">文本内容</span>',
						//属性绑定
						valuestr:'云鹤衫',
						//表达式
						str:'hello world',
						num:6,
						ok:false,
						idstr:'book_',
						// class绑定
						calssStr:'a',
						// style绑定
						styleStr:'color:blue;'
					}
				}
			})
		</script>
	</body>
</html>

效果:

id绑定效果:

二、指令

简介:指的是带有“v-”前缀的特殊属性

核心指令:v-if|v-else|v-else-if)/v-show/v-for/v-bind/v-on/v-model

v-if|v-else|v-else-if:根据其后表达式的bool值进行判断是否渲染该元素

他们只能是兄弟元素

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

v-if和v-show的区别:

1、主要区别

(1)“v-show”只编译一次;而“v-if”不停地销毁和创建
(2)“v-if”更适合于带有权限的操作,渲染时判断权限数据
(3)v-show更适合于日常使用,可以减少数据的渲染,减少不必要的操作

2、本质区别

(1)vue-show本质就是标签display设置为none,控制隐藏
(2)vue-if是动态的向DOM树内添加或者删除DOM元素

v-for:类似JS的遍历,

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

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

 v-bind/v-on/v-model这三个指令已经在上一篇博客中使用过

thml代码块

<!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>
	</head>
	<body>
		<div id="app">
			<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>
			<hr />
			<p>v-show</p>
			请输入结果:<input v-model="showflag" />
			<span v-show="showflag">show:展示与否</span>
			<span v-if="showflag">if:展示与否</span>
			<hr />
			<p>v-for</p>
			<select>
				<option v-for="l in likes" :value="l.id">{{l.name}}</option>
			</select>
			<br />
			<div v-for="l in likes">
				<input type="checkbox" :value="l.id"/>{{l.name}}
			</div>
		</div>
		<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>
	</body>
</html>

v-if效果:

v-show效果:

v-for效果:

下拉框:

复选框:

三、过滤器

全局过滤器:

Vue.filter('filterName', function (value) {
 // value 表示要过滤的内容
});

局部过滤器:

new Vue({
 filters:{'filterName':function(value){}}
});

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

注2:过滤器可以串联     

{{ message | filterA | filterB }}

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

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

html代码

<!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>
	</head>
	<body>
		<div id="app">
			<!-- {{msg|strSplit}} -->
			<!-- 过滤器的串联 -->
			{{msg|strSplit|strSplit2}}<br />
			<!-- 过滤器传参 -->
			{{msg|strSplit3(2,5)}}<br />
			{{msg|strSplit3(1,4)}}
		</div>
		<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(3,5);
			})
			Vue.filter('strSplit3',function(value,a,b){
				console.log(value);
				return value.substring(a,b);
			})
			new Vue({
				el: "#app",
				data() {
					return {
						msg:'hello vue!!'
					}
				}
			})
		</script>
	</body>
</html>

效果:

四、计算属性与监听属性

计算属性

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

   computed:{}

监听属性

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

   watch:{}

 html

<!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>
	</head>
	<body>
		<div id="app">
			<p>计算属性</p>
			请输入第一个数:<input v-model="x"/><br />
			请输入第二数:<input v-model="y"/><br />
			结果为:{{addFlag}}
			<hr />
			<p>监听属性</p>
			请输入千米:<input  v-model="km"/><br />
			请输入米:<input v-model="m"/>
		</div>
		<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)
					}
				},
				watch:{
					km:function(v){
						// :之前对应的是被监听的属性,v值的是被监听属性的值
						// 当v对应的值发生变化的时候,会执行这个方法
						// v代表是千米
						this.m = parseInt(v)*1000;
					},
					m:function(v){
						this.km = parseInt(v)/1000;
					}
				}
			})
		</script>
	</body>
</html>

效果:

 五、购物车案例

<!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>
	</head>
	<body>
		<div id="app">
			<p>购物车</p>
			<table>
				<tr>
					<td>物品</td>
					<td>单价</td>
					<td>数量</td>
					<td>小计</td>
				</tr>
				<tr>
					<td>帽子</td>
					<td>
						{{maoziDanjia}}
					</td>
					<td>
						<input v-model="maoziShuliang"/>
					</td>
					<td>{{maoziXiaoji}}</td>
				</tr>
				<tr>
					<td>衣服</td>
					<td>
						{{yifuDanjia}}
					</td>
					<td>
						<input v-model="yifuShuliang"/>
					</td>
					<td>{{yifuXiaoji}}</td>
				</tr>
				<tr>
					<td>裤子</td>
					<td>
						{{kuziDanjia}}
					</td>
					<td>
						<input v-model="kuziShuliang"/>
					</td>
					<td>{{kuziXiaoji}}</td>
				</tr>
				<tr>
					<td>总价</td>
					<td colspan="3">{{zongJia}}</td>
				</tr>
			</table>
		</div>
		<script type="text/javascript">
			
			new Vue({
				el: "#app",
				data() {
					return {
						
						maoziDanjia:20,
						yifuDanjia:300,
						kuziDanjia:700,
						maoziShuliang:0,
						yifuShuliang:0,
						kuziShuliang:0
					}
				},computed: {
					
					// 因为数量 会影响小计,小计不会影响数量,使用使用计算属性
					maoziXiaoji:function(){
						return parseInt(this.maoziDanjia) * parseInt(this.maoziShuliang);
					},
					yifuXiaoji:function(){
						return parseInt(this.yifuDanjia) * parseInt(this.yifuShuliang);
					},
					kuziXiaoji:function(){
						return parseInt(this.kuziDanjia) * parseInt(this.kuziShuliang);
					},
					zongJia:function(){
						return parseInt(this.maoziXiaoji) + parseInt(this.yifuXiaoji) + parseInt(this.kuziXiaoji);
					} 
				}
			})
		</script>
	</body>
</html>

 

相关文章:

  • 世界第一台通用计算机:ENIAC
  • JAVA学习----HashSet类
  • 文章组合生成-免费文章组合生成软件
  • 华为面试应该怎么准备?
  • JDBC如何记忆
  • C语言之预处理
  • Flutter 系列---入门篇
  • 全球与中国汽车多楔带行业发展趋向分析及投资前景预测报告2022-2028年
  • Java IO流详解
  • 迷宫_Sarsa算法_边做边学深度强化学习:PyTorch程序设计实践(2)
  • iOS视频捕获入门篇
  • 数据可视化系列教程|六大组件基础知识
  • 《MySQL技术内幕:InnoDB存储引擎》学习笔记-第二章
  • 无线能量传输(WPT)中收发线圈的等效电路模型
  • 回归预测 | MATLAB实现BP神经网络多输入单输出回归预测
  • [数据结构]链表的实现在PHP中
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 4. 路由到控制器 - Laravel从零开始教程
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • jquery cookie
  • Leetcode 27 Remove Element
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • node-glob通配符
  • RxJS: 简单入门
  • text-decoration与color属性
  • vue:响应原理
  • vue2.0项目引入element-ui
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 高程读书笔记 第六章 面向对象程序设计
  • 基于 Babel 的 npm 包最小化设置
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 少走弯路,给Java 1~5 年程序员的建议
  • 深度学习入门:10门免费线上课程推荐
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 突破自己的技术思维
  • 最简单的无缝轮播
  • 整理一些计算机基础知识!
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​MySQL主从复制一致性检测
  • ​力扣解法汇总946-验证栈序列
  • #{}和${}的区别?
  • #《AI中文版》V3 第 1 章 概述
  • #100天计划# 2013年9月29日
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (11)MATLAB PCA+SVM 人脸识别
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二十四)Flask之flask-session组件
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (未解决)macOS matplotlib 中文是方框
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • ***原理与防范
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net core 6 集成和使用 mongodb