Vue模板语法(一)

目录

一.插值

1、 文本

2、html

3、属性

4、 表达式

二、指令

1、核心指令

①、v-if|v-else|v-else-if

②、 v-show

 ③、v-for

④、v-on

 2、动态参数

 三、过滤器

1、全局过滤器

 2、局部过滤器 

四、计算属性和监听属性

1、计算属性

2、监听属性


一.插值

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>文本</p>
			<h3>{{msg}}</h3>
			<p>html串</p>
			<div v-html="htmlstr"></div>
			<p>vue中的属性</p>
			<!-- 所有的原生属性,要利用vue变量,都需要在对应的属性前加 v-bind -->
			<a v-bind:href="hrefstr">百度</a>
			<input :value="valuestr"/>
			<p>表达式</p>
			{{str.substring(0,4)}}<hr />
			小黑{{number+1}}<hr />
			{{ok ? 'yes' : 'no'}}<hr />
			<span :id="'id_'+id">xx</span>
	</body>
	
	<script type="text/javascript">
		// 绑定边界 ES6具体表现
		new Vue({ 
			el: '#app',
			data() {
				return {
					msg: '小白不白',
					htmlstr:'<h3 style="color:red;">这是一个html片段</h3>',
					hrefstr:'https://www.baidu.com',
					valuestr:'224',
					str:'小白不是小黑',
					number:59,
					ok:true,
					id:123
				}
			}

		})
	</script>
</html>

1、 文本

{{msg}}

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>文本</p>
			<h3>{{msg}}</h3>
	</body>	
	<script type="text/javascript">
		// 绑定边界 ES6具体表现
		new Vue({ 
			el: '#app',
			data() {
				return {
					msg: '小白不白',
				}
			}
		})
	</script>
</html>

运行结果:

2、html

  使用v-html指令用于输出html代码 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>html串</p>
			<div v-html="htmlstr"></div>
	</body>
	
	<script type="text/javascript">
		// 绑定边界 ES6具体表现
		new Vue({ 
			el: '#app',
			data() {
				return {
					htmlstr:'<h3 style="color:red;">这是一个html片段</h3>',
				}
			}
		})
	</script>
</html>

 运行结果;

3、属性

 HTML属性中的值应使用v-bind指令

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>vue中的属性</p>
			<!-- 所有的原生属性,要利用vue变量,都需要在对应的属性前加 v-bind -->
			<a v-bind:href="hrefstr">百度</a>
			<input :value="valuestr"/>
	</body>
	
	<script type="text/javascript">
		// 绑定边界 ES6具体表现
		new Vue({ 
			el: '#app',
			data() {
				return {
					hrefstr:'https://www.baidu.com',
					valuestr:'224'
				}
			}

		})
	</script>
</html>

运行结果:

4、 表达式

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

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>表达式</p>
			{{str.substring(0,4)}}<hr />
			小黑{{number+1}}<hr />
			{{ok ? 'yes' : 'no'}}<hr />
			<span :id="'id_'+id">xx</span>
	</body>
	
	<script type="text/javascript">
		// 绑定边界 ES6具体表现
		new Vue({ 
			el: '#app',
			data() {
				return {
					str:'小白不是小黑',
					number:59,
					ok:true,
					id:123
				}
			}

		})
	</script>
</html>

运行结果:

二、指令

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

1、核心指令

①、v-if|v-else|v-else-if

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

         他们只能是兄弟元素

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

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

 

案例:分数判断

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>v-if|v-else|v-else-if</p>
			分数:<input v-model="score" />
			<div v-if="score>80">优秀</div>
			<div v-else-if="score>60">良好</div>
			<div v-else="score<60">还需努力</div>
		</div>

	</body>

	<script type="text/javascript">
		// 绑定边界 ES6具体表现
		new Vue({
			el: '#app',
			data() {
				return {
					score: 78,
			},
					})
	</script>
</html>

运行结果:

②、 v-show

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>v-if|v-else|v-else-if</p>
			分数:<input v-model="score" />
			<div v-if="score>80">优秀</div>
			<div v-else-if="score>60">良好</div>
			<div v-else="score<60">还需努力</div>
			<p>v-show</p>
			<div v-show="score>90"> v-show-优秀学员</div>
			<div v-if="score>90"> v-if-优秀学员</div>	
		</div>

	</body>

	<script type="text/javascript">
		// 绑定边界 ES6具体表现
		new Vue({
			el: '#app',
			data() {
				return {
					score: 78,
			}
		})
	</script>
</html>

运行结果:

 

  v-show与v-if的区别:

当v-show与v-if符合判断条件则都出现,若不符合判断条件,v-show被隐藏,而v-if直接消失

 ③、v-for

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

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

!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>v-for</p>
			<select v-model="hobbySelect">
				<option v-for="h in hobby" :value="h.id">{{h.name}}</option>
			</select>
			 <input v-model="hobbySelect" /> 
		</div>

	</body>

	<script type="text/javascript">
		// 绑定边界 ES6具体表现
		new Vue({
			el: '#app',
			data() {
				return {
					hobby: [{
							id: "1",
							name: "帅哥"
						},
						{
							id: "2",
							name: "游戏"
						},
						{
							id: "3",
							name: "美女"
						},
					],
					hobbySelect:3
				};
			}		})
	</script>
</html>

运行结果:

CheckBox 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>v-for</p>
			<select v-model="hobbySelect">
				<option v-for="h in hobby" :value="h.id">{{h.name}}</option>
			</select>
			<div v-for="h in hobby">
				<input  :value="h.id" type="checkbox"/>{{h.name}}
			</div>
		</div>

	</body>

	<script type="text/javascript">
		// 绑定边界 ES6具体表现
		new Vue({
			el: '#app',
			data() {
				return {
					score: 78,
					hobby: [{
							id: "1",
							name: "帅哥"
						},
						{
							id: "2",
							name: "游戏"
						},
						{
							id: "3",
							name: "美女"
						},
					],
					hobbySelect:3
				};
			},
					})
	</script>
</html>

运行结果:

④、v-on

v-on缩写 : @

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>v-on</p>
			<button v-on:click="handel">触发事件</button>
			<button @click="handel">触发事件2</button>
		</div>

	</body>

	<script type="text/javascript">
		// 绑定边界 ES6具体表现
		new Vue({
			el: '#app',
			methods:{
				handel(){
					alert("触发事件")
				}
			}
		})
	</script>
</html>

 运行结果:

 2、动态参数

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

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>动态参数</p>
			<button v-on:[evname]="handel">动态参数</button>
		</div>

	</body>

	<script type="text/javascript">
		new Vue({
			el: '#app',
			data() {
				return {
				 evname:'click'
                //点击两次触发
				//evname:'dblclick'
				};
			},
			methods:{
				handel(){
					alert("触发事件")
				}
			}
		})
	</script>
</html>

运行结果;

 三、过滤器

1、全局过滤器

 Vue.filter('filterName', function (value) {

     // value 表示要过滤的内容

   });

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			{{msg|all}}<hr />
		</div>
	</body>

	<script type="text/javascript">
	//全局过滤器
		Vue.filter('all', function(value) {
			// value 表示要过滤的内容
			return value.substring(0,3)
		});
		new Vue({
			el: '#app',
			data() {
				return {
					msg: "小白不是小黑"
				};
			}
		})
	</script>
</html>

运行结果:

 2、局部过滤器 

局部过滤器

   new Vue({

     filters:{'filterName':function(value){}}

   });

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
		    <p>局部过滤器</p>
			{{msg|single}}<hr />
			<p>过滤器串联   </p>
			{{msg|all|single}}<hr />
			<p>过滤器带参数:</p>
			{{msg|param(1,4)}}			
		</div>
	</body>

	<script type="text/javascript">
		new Vue({
			el: '#app',
			data() {
				return {
					msg: "小白不是小黑"
				};
			},
			filters:{
				'single':function(val){
					return val.substring(2,3)
				},
				'param':function(val,star,end){
					return val.substring(star,end)
				}
			}
		})
	</script>
</html>

②、过滤器串连

 {{msg|all|single}}

③、带参数

{{msg|param(1,4)}}

 'param':function(val,star,end){
                    return val.substring(star,end)
                }

 运行结果:

 

四、计算属性和监听属性

1、计算属性

computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>计算属性</p>
			<table border="1" style="width: 600;height: 300px;">
				<tr>
					<td>衣服</td>
					<td>100</td>
					<td>
						<input v-model="yifu" />
					</td>
					<td>
						{{yifuTotal}}
					</td>
				</tr>
				<tr>
					<td>书</td>
					<td>30</td>
					<td>
						<input v-model="book" />
					</td>
					<td>
						{{bookTotal}}
					</td>
				</tr>
				<tr>
					<td>鞋子</td>
					<td>70</td>
					<td>
						<input v-model="xiezi" />
					</td>
					<td>
						{{xieziTotal}}
					</td>
				</tr>
				<tr>
					<td>总价</td>
					<td colspan="3">{{total}}</td>
				</tr>
			</table>
		</div>

	</body>

	<script type="text/javascript">
	//全局过滤器
		Vue.filter('all', function(value) {
			// value 表示要过滤的内容
			return value.substring(0,3)
		});
		new Vue({
			el: '#app',
			data() {
				return {
					yifu: 1,
					book:1,
					xiezi:1,
					km:2,
					m:2000
				};
			},
			computed:{
				yifuTotal(){
					return this.yifu*100
				},
				bookTotal(){
					return this.book*30
				},
				xieziTotal(){
					return this.xiezi*70
				},
				total(){
					return this.yifuTotal+this.bookTotal+this.xieziTotal
				}
			},
		
		})
	</script>
</html>

运行结果:

2、监听属性

   watch主要用于监控vue实例的变化,它监控的变量当然必须在data里面声明才可以,它可以监控一个变量,也可以是一个对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<p>监听属性</p>
			千米:<input v-model="km"/> 
			米:<input v-model="m"/>
		</div>

	</body>

	<script type="text/javascript">
	//全局过滤器
		Vue.filter('all', function(value) {
			// value 表示要过滤的内容
			return value.substring(0,3)
		});
		new Vue({
			el: '#app',
			data() {
				return {
					km:2,
					m:2000
				};
			},
			methods: {
				handel() {
					alert("触发事件")
				}
			},
			watch:{
				m:function (v){
					this.km= parseInt(v)/1000;
				},
				km:function (v){
					this.m= parseInt(v)*1000;
				}
				
			}
		})
	</script>
</html>

 运行结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值