Vue模板语法(一)

目录

一、插值 

 二、指令

​三、动态参数

 四、过滤器

五、计算属性&监听属性


一、插值 

1.1文本{msg}

 示例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- vue的相关依赖 -->
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		<!-- 定义边界   Es6的具体体现 -->
		<div id="app">
			<p>文本</p>
			<h3>{{msg}}</h3>
			<p>html串</p>
			<div v-html="htmlstr">
				
			</div>
		</div>
	</body>
	<script type="text/javascript">
		// 绑定边界
		new Vue({
			el: '#app',
			data() {
				return {
					// ctrl+k格式化
					msg: 'vue你大爷',
					htmlstr: '<h3 style="color:red;">这是一个html片段</h3>'
				};
			}
		})
	</script>
</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.vue中的属性</p>
			<!-- 所有原生态的属性,要利用vue的变量,都需要在对应的属性前加v-binc -->
			<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中含有内置函数

 Vue提供了完全的JavaScript表达式支持
          {{str.substr(0,6).toUpperCase()}}
          {{ number + 1 }}
          {{ ok ? 'YES' : 'NO' }}
          <li v-bind:id="'list-' + id">我的Id是js动态生成的</li>

<!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>

 运行结果:

 二、指令

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

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

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

定义一个input绑定score数据(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-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">
        <!-- 绑定边界 -->
        new Vue({
            el:'#app',
            data() {
                return {
                    score:66
                };
            }
        })
    </script>
</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">v-show-上优秀学员名单</div>
                <div v-if="score>90">v-if-上优秀学员名单</div>

运行结果:

成绩大于90时:

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

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

v-if连div代码都不存在了 ,v-show只是display隐藏掉了 

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

 3、v-for:类似JS的遍历

遍历数组: v-for="item in items", items是数组,item为数组中的数组元素
遍历对象: v-for="(value,key,index) in stu", value属性值,key属性名,index下标

下拉框:hobbySelected被选中的选项——回显,以及可以根据后面的输入框填入的进行下拉框选中

<!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="hobbySelected">
                    <option v-for="h in hobby" :value="h.id">{{h.name}}</option>
                </select>
                <input v-model="hobbySelected" />
        </div>
    </body>
    
    <script type="text/javascript">
        <!-- 绑定边界 -->
        new Vue({
            el:'#app',
            data() {
                return {
                    hobby:[
                        {id:"1",name:"洗头"},
                        {id:"2",name:"洗浴"},
                        {id:"3",name:"洗脚"}
                    ],
                    hobbySelected:3
                };
            }
        })
    </script>
</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(缩写@click="handle") 

代码:

<!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>4.v-on</p>
            <button type="button" v-on:click="handle">触发事件</button>
		 <p>4.v-on	(缩写@click="handle") </p>
            <button type="button" @click="handle">触发事件222</button>
        </div>
    </body>
    
    <script type="text/javascript">
        <!-- 绑定边界 -->
        new Vue({
            el:'#app',
            data() {
                return {
                    score:78,
                    hobby:[
                        {id:"1",name:"洗头"},
                        {id:"2",name:"洗浴"},
                        {id:"3",name:"洗脚"}
                    ],
                    hobbySelected:3
                };
            },
            methods:{
                handle(){
                    alert("触发事件");
                }
            }
        })
    </script>
</html>

运行如下: 

三、动态参数

  1、定义:动态参数是指可以在v-on:[定义一个属性],然后在data里面进行传值就可以实现动态参数(动态参数表达式有一些语法约束,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>3.动态参数</p>
		<button v-on:[evname]="handle">动态参数</button>
        </div>
    </body>
    
    <script type="text/javascript">
        <!-- 绑定边界 -->
        new Vue({
            el:'#app',
            data() {
                return {
                // evname:'click'
				 evname:'dblclick'
                 
                };
            },
			methods:{
				handle(){
					alert("触发事件");
				}
			}
        })
    </script>
</html>

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

 四、过滤器

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

1.全局过滤器

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

2、局部过滤器
  new Vue({
     filters:{'filterName':function(value){}}
   });

3、串联
4、过滤器可以传参的

代码:(注意这里的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}},{{msg|single}},{{msg|all|single}},{{msg|param(4,5)}}
        </div>
    </body>
    
    <script type="text/javascript">
    //全局过滤器
        Vue.filter('all', function (value) {
             return value.substring(2,6);
           });

        <!-- 绑定边界 -->
        new Vue({
            el:'#app',
            data() {
                return {
                    msg:"java最牛"
                };
            },
            // 局部过滤
            filters:{
                'single':function(val){
                    return val.substring(2,3);
                },
                'param':function(val,start,end){
                    return val.substring(start,end);

                }
            }

        })
    </script>
</html>

五、计算属性&监听属性

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

 2、计算属性:

我将会用一个购物车实例来讲解计算属性:在边界中要创建一个表格,在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>
            <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>28</td>
                    <td>
                        <input v-model="xiezi" />
                    </td>
                    <td>
                        {{xieziTotal}}
                    </td>
                </tr>
                <tr>
                    <td>裤子</td>
                    <td>12</td>
                    <td>
                        <input v-model="kuzi" />
                    </td>
                    <td>
                        {{kuziTotal}}
                    </td>
                </tr>
                <tr>
                    <td>总价</td>
                    <td colspan="3">{{total}}</td>
                </tr>
            </table>
        <p>监听属性</p>
            千米:<input v-model="km" />
            米:<input v-model="m" />
        </div>
    </body>
    
    <script type="text/javascript">
           <!-- 绑定边界 -->
        new Vue({
            el:'#app',
            data() {
                return {
                    maozi:1,
                    xiezi:1,
                    kuzi:1,
                    km:2,
                    m:2000
                };
            },
            methods:{
                handle(){
                    alert("触发事件");
                }
            },
            // 计算属性
             computed:{
                 maoziTotal(){
                     return this.maozi*30;
                 },
                 xieziTotal(){
                     return this.xiezi*28;
                 },
                 kuziTotal(){
                      return this.kuzi*12;
                 },
                 total(){
                     return this.maoziTotal+this.xieziTotal+this.kuziTotal;
                 }
             },
             // 监听属性
             watch:{
                 // v指的是m变量
                 m(v){
                     this.km=parseInt(v)/1000
                 },
                 // v指的是km变量
                 km(v){
                     this.m=parseInt(v)*1000
                 }
             }
        })
    </script>
</html>

运行如下: 

 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值