Vue模板语法(一)

目录

一、插值

二、指令

三、动态参数

四、过滤器

五、属性


一、插值

          1、文本:(msg):

代码:

<!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>1.文本</p>
			<h3>{{msg}}</h3>

			//<p>2.html串</p>
			
		</div>
		{{msg}}
		<script type="text/javascript">
			//绑定边界
			new Vue({
				el: '#app',
				data() {
					return {
						msg: 'vue初步使用',
						//htmlstr: '<h3 style="color:red">这是一个html片段</h3>'
					}
				}
			})
		</script>
	</body>
</html>

运行结果:

          2、html串:关键字:v-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>
	</head>
	<body>
		<div id="app">
			<p>1.文本</p>
			<h3>{{msg}}</h3>
			
			<p>2.html串</p>
			<div v-html="htmlstr">
			</div>
		</div>
 		<script type="text/javascript">
			//绑定边界
			new Vue({
				el: '#app',
				data() {
					return {
						msg: 'vue初步使用',
						htmlstr: '<h3 style="color:red">这是一个html片段</h3>'
					}
				}
			})
		</script>
	</body>
</html>

运行结果:

          3、Vue属性:关键字:v-bind=“属性”,也可以进行缩写:(:)。

代码:

<!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>1.文本</p>
			<h3>{{msg}}</h3>
			<hr />

			<p>2.html串</p>
			<div v-html="htmlstr">
			</div>
			<hr />
			<p>3.属性</p>
			<a v-bind:href="hrefstr">百度一下</a>
			<input :value="valuestr"/>
			<hr />
</div>
		<script type="text/javascript">
			//绑定边界
			new Vue({
				el: '#app',
				data() {
					return {
						msg: 'vue初步使用',
						htmlstr: '<h3 style="color:red">这是一个html片段</h3>',
						hrefstr: 'http://www.baidu.com',
						valuestr:'2223 ',
				}
				}
			})
		</script>
	</body>
</html>

 运行结果:

1、点击百度链接可以跳转到百度官网:

2、v-bind缩写版本:在data中定一个valuestr赋一些值,之后用一个文本框(里面写法:value="valuestr")

           4、表达式:

                 4.1 vue中含有内置函数

代码:同样在data中定义一个str:'java是最牛语言'中文字符串,在边界中{{str.substring(0,4).toUpperCase()}}

<!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>1.文本</p>
			<h3>{{msg}}</h3>
			<hr />

			<p>2.html串</p>
			<div v-html="htmlstr">
			</div>
			<hr />
			<p>3.属性</p>
			<a v-bind:href="hrefstr">百度一下</a>
			<input :value="valuestr"/>
			<hr />
			<p>4.表达式  Vue提供了完全的JavaScript表达式支持</p>
			<p>4.1 vue中含有内置函数/p>
			{{str.substring(0,4).toUpperCase()}}
</div>
		<script type="text/javascript">
			//绑定边界
			new Vue({
				el: '#app',
				data() {
					return {
						msg: 'vue初步使用',
						htmlstr: '<h3 style="color:red">这是一个html片段</h3>',
						hrefstr: 'http://www.baidu.com',
						valuestr:'2223 ',
						str:'java是最牛语言',
	})
		</script>
	</body>
</html>

 运行结果:

                 4.2vue可以支持运算

代码:在data中定义一个数字,在边界中写好{{ number + 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>1.文本</p>
			<h3>{{msg}}</h3>
			<hr />

			<p>2.html串</p>
			<div v-html="htmlstr">
			</div>
			<hr />
			<p>3.属性</p>
			<a v-bind:href="hrefstr">百度一下</a>
			<input :value="valuestr"/>
			<hr />
			<p>4.表达式  Vue提供了完全的JavaScript表达式支持</p>
			<p>4.1 vue中含有内置函数/p>
			{{str.substring(0,4).toUpperCase()}}
			<p>4.2vue可以支持运算</p>
			张三:{{number+1}}
</div>
		<script type="text/javascript">
			//绑定边界
			new Vue({
				el: '#app',
				data() {
					return {
						msg: 'vue初步使用',
						htmlstr: '<h3 style="color:red">这是一个html片段</h3>',
						hrefstr: 'http://www.baidu.com',
						valuestr:'2223 ',
						str:'java是最牛语言',
						number:59,
	})
		</script>
	</body>
</html>

运行结果:

                 4.3vue支持三元运算

代码:在data中一个属性赋值为boolean类型,在边界中写好{{ ok ? 'YES' : 'NO' }}

<!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>1.文本</p>
			<h3>{{msg}}</h3>
			<hr />

			<p>2.html串</p>
			<div v-html="htmlstr">
			</div>
			<hr />
			<p>3.属性</p>
			<a v-bind:href="hrefstr">百度一下</a>
			<input :value="valuestr"/>
			<hr />
			<p>4.表达式  Vue提供了完全的JavaScript表达式支持</p>
			<p>4.1 vue中含有内置函数/p>
			{{str.substring(0,4).toUpperCase()}}
			<p>4.2vue可以支持运算</p>
			张三:{{number+1}}
			<p>4.3vue支持三元运算</p>
			{{ok ? 'yes':'no'}}
</div>
		<script type="text/javascript">
			//绑定边界
			new Vue({
				el: '#app',
				data() {
					return {
						msg: 'vue初步使用',
						htmlstr: '<h3 style="color:red">这是一个html片段</h3>',
						hrefstr: 'http://www.baidu.com',
						valuestr:'2223 ',
						str:'java是最牛语言',
						number:59,
					    ok:true,
})
		</script>
	</body>
</html>

 运行结果:

                  4.4vue支持字符串拼接:

代码:在data中定义一个id并赋值,在边界中写好<span :id="'id_'+id">

<!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>1.文本</p>
			<h3>{{msg}}</h3>
			<hr />

			<p>2.html串</p>
			<div v-html="htmlstr">
			</div>
			<hr />
			<p>3.属性</p>
			<a v-bind:href="hrefstr">百度一下</a>
			<input :value="valuestr"/>
			<hr />
			<p>4.表达式  Vue提供了完全的JavaScript表达式支持</p>
			<p>4.1 vue中含有内置函数/p>
			{{str.substring(0,4).toUpperCase()}}
			<p>4.2vue可以支持运算</p>
			张三:{{number+1}}
			<p>4.3vue支持三元运算</p>
			{{ok ? 'yes':'no'}}
			<p>4.4vue支持字符串拼接</p>
			<span :id="'id_'+id">
			</span> 
			
		</div>
		<script type="text/javascript">
			//绑定边界
			new Vue({
				el: '#app',
				data() {
					return {
						msg: 'vue初步使用',
						htmlstr: '<h3 style="color:red">这是一个html片段</h3>',
						hrefstr: 'http://www.baidu.com',
						valuestr:'2223 ',
						str:'java是最牛语言',
						number:59,
					    ok:true,
						id:19
					}
				}
			})
		</script>
	</body>
</html>

 运行结果:

     

二、指令

          1、v-if|v-else|v-else-if(分支语法):

代码:在data中定义一个成绩,超过80分为优秀,超过60分为良好,60分之下就为差。

定义一个input绑定score数据(v-model):

<!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>1.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>
		<script type="text/javascript">
			//绑定边界
			new Vue({
				el: '#app',
				data() {
					return {
						msg: 'vue初步使用',
						score: 78,
	})
		</script>
	</body>
</html>

运行结果:

          2、v-show:定义一个输入框,同样条件是score>90,当输入框的成绩大于90就显示出"上优秀就业榜单"小于90就是不显示

代码:

	<p>2.v-show</p>
			<p>2.1v-show与v-if的区别</p>
			<div v-show="score>90">
				上优秀就业榜单
			</div>
			<div v-if="score>90">
				上优秀就业榜单
			</div>

运行结果:

成绩大于90时:

成绩小于90时:将不会显示"上优秀就业榜单"

上述图示 还可以阐释v-if与v-show的区别:

当成绩没有大于90时,两种都不会显示,但是在检查界面中可以看出v-show还是在显示,只是用js隐藏了(dispaly),但是v-if在检查中直接消失。

          3、v-for: 在data中定义一个爱好数组,其中每一个爱好都有编号,以及name。通过遍历hobby数组,将值赋到下拉框中

代码:

<!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>1.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>2.v-show</p>
			<p>2.1v-show与v-if的区别</p>
			<div v-show="score>90">
				上优秀就业榜单
			</div>
			<div v-if="score>90">
				上优秀就业榜单
			</div>
			
			<p>3.v-for</p>
			<select v-model="hoddyselected">
				<option v-for="h in hobby":value="h.id">{{h.name}}</option>
			</select>
</div>
		<script type="text/javascript">
			//绑定边界
			new Vue({
				el: '#app',
				data() {
					return {
						msg: 'vue初步使用',
						score: 78,
						hobby:[
							{id:1,name:'洗头'},
							{id:2,name:'按摩'},
							{id:3,name:'洗jio'}
						],
})
		</script>
	</body>
</html>

运行效果:

          4、v-for复选框:

代码:

         <p>3.v-for复选框</p>
            <div v-for="h in hobby">
                <input   v-bind:value="h.id"  type=checkbox >{{h.name}}
            </div>

运行结果:

          5、v-on:

代码:

    <p>4.v-on</p>
            <button type="button" v-on:click="handle">触发事件</button>
            <button type="button" @click="handle">触发事件222</button>

(缩写@click="handle"

<script type="text/javascript">

methods:{
                    handle(){
                        alert("触发事件");
                    }

</script>

运行结果:

三、动态参数

          1、定义:动态参数是指可以在v-on:[定义一个属性],然后在data里面进行传值就可以实现动态参数

<!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>
			<button type="button" v-on:[evname]="handle">动态参数</button>



		</div>
		<script type="text/javascript">
			//绑定边界
			new Vue({
				el: '#app',
				data(){
					return { 
                    // evname:'click'
					evname:'dblclick'
					}
				},
				methods:{
					handle(){
						alert('动态参数')
					}
					
					
				}
			})
		</script>
	</body>
</html>

运行结果:这里是点击了两下,才触发事件,因为evname为delclick。

四、过滤器:

          1、简介:过滤分为局部过滤和全局过滤,这个概念就好比全局变量和局部变量。

          2、全局过滤器:在script标签中定义过滤器,不是在vue中,在vue的data中定义好msg,最后在边界里面显示出msg:

代码:(注意这里的value是指要被过滤的文字)

    <div id="app">
            <p>全局过滤器</p>
            {{msg}}

    <br>
            {{msg|all}}

<script type="text/javascript">
            Vue.filter('all', function(value) {
                return value.substring(0, 3)
            });

            //绑定边界
            new Vue({
                el: '#app',
                data() {
                    return {
                        msg: "java最牛"
                    };
                },

    })
        </script>
    </body>
</html>

运行效果:

          3、局部过滤器:

局部过滤器和全局过滤器不一样,首先从范围出发,局部过滤器只用于本类,而全局过滤器可以跨类使用,其次两个过滤器的书写代码位置不一样,全局过滤器放在vue外面,而局部过滤器放在vue里面

代码:

    <p>局部过滤器</p>
            {{msg|single}}

<script type="text/javascript">

new Vue({

        filters: {
                    'single': function(val) {
                        return val.substring(0, 3)
                    },
                    'param': function(val, start, end) {
                        return val.substring(start, end)
                    },
                }
            })

        </script>

运行效果:

          4、局部过滤器和全局过滤器同时使用:

代码:

<p>局部过滤器和全局过滤器同时使用</p>
            {{msg|all|single}}

运行结果: 首先先进入到全局过滤器,进入全局过滤器截取从0到3(注意:取头不取尾)的文字,所以字符串经过全局变量器之后变成:jav,之后才进入局部过滤器截取从0到3的文字,出来之后变成jav

          5、过滤器传参:

定义一个param函数用来进行动态传参:

<p>过滤器传参</p>
            {{msg|param(2,3)}}

    <script type="text/javascript">

new Vue({

             'param': function(val, start, end) {
                        return val.substring(start, end)
                    },
                }
            })
        </script>

运行结果:

五、属性

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

          2、计算属性:

我将会用一个购物车实例来讲解计算属性:在边界中要创建一个表格,在data里面要定义好各个物品的数量,里面的数据是动态数据,就是说一个数据会随着另一个数据的改变而改变

代码:

<div id="app">
			<p>计算属性</p>
			<table border="1" style="width:600px;height:300px;">
				<tr>
					<td>帽子</td>
					<td>30</td>
					<td>
						<input v-model="maozi" />
					</td>
					<td>{{maoziTotal}}</td>
				</tr>
				<tr>
					<td>裤子</td>
					<td>190</td>
					<td><input v-model="yifu" /></td>
					<td>{{yifuTotal}}</td>
				</tr>
				<tr>
					<td>领带</td>
					<td>200</td>
					<td><input v-model="lingdai" /></td>
					<td>{{lingdaiTotal}}</td>
				</tr>
				<tr>
					<td>总价</td>
					<td colspan="3">{{Total}}</td>
				</tr>
			</table>
			<p>监听属性</p>
			千米:<input  v-model="km"  />
			米:<input  v-model="m"/>
			
		</div>
<script type="text/javascript">
new Vue({
				el: '#app',
				data() {
					return {
						// evname:'click'
						evname: 'dblclick',
						maozi: 1,
						yifu: 2,
						lingdai: 3,
						km:3,
						m:3000,
					}
				},
computed: {
					maoziTotal() {
						return this.maozi * 30;
					},
					yifuTotal() {
						return this.yifu * 190;
					},
					lingdaiTotal() {
						return this.lingdai * 190;
					},
					Total() {
						return this.maoziTotal + this.yifuTotal + this.lingdaiTotal;
					}
				},
	})
		</script>

 运行结果:

           3、监听属性:

用km和m的换算来讲解这个知识点:

<p>监听属性</p>
            千米:<input  v-model="km"  />
            米:<input  v-model="m"/>

<script type="text/javascript">

watch:{

new Vue({
                    km:function(v){
                        this.m=parseInt(v)*1000;
                    },
                    m:function(v){
                        this.km=parseInt(v)/1000;
                    }
                }
            })

    })
        </script>

注意:km:function(v){
                        this.m=parseInt(v)*1000;
                    },该代码的意思是v为参数,catch用来监听km,之后将km的值除以1000赋值给m,m函数也是一样的

运行结果:

           4、监听属性和计算属性的区别:

                1、计算属性没有在变量中使用,但是在vue边界中使用

<input v-model="maozi" />

                2、监听属性在变量中定义中,而且监听属性的变量是相互影响的

    km:function(v){
                        this.m=parseInt(v)*1000;
                    },
                    m:function(v){
                        this.km=parseInt(v)/1000;
                    }

今天的知识就分享到这里了,希望对你有所帮助。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值