vue模板语法上集

目录

一、插值

二、指令 

三、过滤器 

四、计算属性&监听属性&购物车案例 


一、插值

1.1.1 文本
{{msg}}
1.1.2 html
使用v-html指令用于输出html代码
1.1.3 属性
HTML属性中的值应使用v-bind指令
1.1.4 表达式
Vue提供了完全的JavaScript表达式支持
{{str.substr(0,6).toUpperCase()}}
{{ number + 1 }}
{{ ok ? ‘YES’ : ‘NO’ }}
我的Id是js动态生成的

1.1.5 class绑定
使用方式:v-bind:class=“expression”
expression的类型:字符串、数组、对象
1.1.6 style绑定
v-bind:style=“expression”
expression的类型:字符串、数组、对象
 

<!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><br />
			<p>html串</p>
			<div v-html="htmlstr"></div><br />
			<p>vue中的属性</p>
			<!-- 所有原生态属性,要利用vue的变量,都需要在对应的属性前加v_bind -->
			<p v-bind:href="hrefstr">百度</p>
			<input :value="valuestr" />
			<p>表达式</p>
			{{str.substring(0,4).toUpperCase()}}<br />
			张三:{{number+1}}<br />
			{{ok?'yes':'no'}}<br />
			<span :id="'goods_'+id">aa</span>
		</div>
	</body>
	<script type="text/javascript">
		//绑定边界 ES6具体体现
		new Vue({
			el:'#app',
			data(){
				return {
					// ctrl+k格式化
					msg:'hello,vue',
					htmlstr:'<h3 style="color:red;">这是一个html片段</h3>',
					hrefstr:'http://www.baidu.com',
					valuestr:'2223',
					str:'ashdiasd',
					number:59,
					ok:false,
					id:66
				};
			}
		})
	</script>
</html>

二、指令 

指的是带有“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-else-if上一个兄弟元素必须是v-if
v-else上一个兄弟元素必须是v-if或者是v-else-if
v-show:与v-if类似,只是会渲染其身后表达式为false的元素,而且会给这样的元素添加css代码:style=“display:none”
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:用来在 input、select、textarea、checkbox、radio 等表单控件元素上创建双向数据绑定,根据表单上的值,自动更新绑定的元素的值
v-for/v-model一起绑定[多选]复选框和单选框
 

<!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-slese-if</p>
			分数:<input v-model="score" />
			<div v-if="score>=90">优+</div>
			<div v-else-if="score>=80">优</div>
			<div v-else-if="score>=70">良</div>
			<div v-else-if="score>=60">及格</div>
			<div v-else-if="score<60">不及格</div>
			<div v-else="">请正确输入分数</div>
			<p>v_show</p>
			请输入结果:<input v-model="showflag" />
			<span v-show="showflag">show:展示与否</span>
			<span v-if="showflag">if:展示与否</span>
			<p>v-for</p>
			<select v-model="likesSelected">
				<option v-for="l in likes" :value="l.id">{{l.name}}</option>
			</select>
			<div v-for="l in likes">
				<input :value="l.id" type="checkbox"/>{{l.name}}
			</div>
		</div>
	</body>
	<script type="text/javascript">
		new Vue({
			el:'#app',
			data(){
				return {
					score:0,
					likes:[
						{id:"1",name:"足球"},
						{id:"2",name:"篮球"},
						{id:"3",name:"打游戏"}
					],
					likesSelected:3,
					showflag:false
				};
			}
		})
	</script>
</html>

三、过滤器 

过滤器
全局过滤器
Vue.filter(‘filterName’, function (value) {
// value 表示要过滤的内容
});
局部过滤器
new Vue({
filters:{‘filterName’:function(value){}}
});
vue允许你自定义过滤器,被用作一些常见的文本格式化,格式如下:
< 在两个大括号中 -->
{{ name | capitalize }}
< 在 v-bind 指令中 -->
div v-bind:id=“rawId | formatId”>

注1:过滤器函数接受表达式的值作为第一个参数
注2:过滤器可以串联
{{ message | filterA | filterB }}
注3:过滤器是JavaScript函数,因此可以接受参数:
{{ message | filterA(‘arg1’, arg2) }}
 

<!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|strSplit}} -->
			<!-- 过滤器的串联 -->
			{{msg|strSplit|strSplit2}}
			<!-- 过滤器传参 -->
			{{msg|strSplit3(2,5)}}
			{{msg|strSplit3(1,4)}}
		</div>
	</body>
	<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>
</html>

四、计算属性&监听属性&购物车案例 

计算属性
计算属性可用于快速计算视图(View)中显示的属性。这些计算将被缓存,并且只在需要时更新
computed:{}
监听属性
监听属性 watch,我们可以通过 watch 来响应数据的变化
watch:{}

<!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="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>{{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>
	</body>
	<script type="text/javascript">
		new Vue({
			el:'#app',
			data(){
				return {
					x:0,
					y:0,
					km:0,
					m:0,
					maoziDanjia:20,
					yifuDanjia:3000,
					kuziDanjia:700,
					maoziShuliang:1,
					yifuShuliang:1,
					kuziShuliang:1
				};
			},computed:{
				//计算属性
				addFlag:function(){
					return parseInt(this.x)+parseInt(this.y);
				},
				// 因为数量会影响小计,小计不会影响数量,所有使用计算属性
				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.yifuXiaoji)+parseInt(this.kuziXiaoji)+parseInt(this.maoziXiaoji);
				}
			},
			watch:{
				km:function(v){
					//:之前对应的是被监听的属性,v指的是被监听的值
					// 当v对应的值发生变化的时候,会执行这个方法
					//v代表是千米
					// debugger;
					this.m=parseInt(v)*1000
				},
				m:function(v){
					this.km=parseInt(v)/1000;
				}
			}
		})
	</script>
</html>

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值