Vue.js基本语法上

news2024/11/26 7:29:16

                                    🎬 艳艳耶✌️:个人主页

                                   🔥 个人专栏 :《Spring与Mybatis集成整合》《springMvc使用》

                                    ⛺️ 生活的理想,为了不断更新自己 !


 

目录

1.插值

1.1 文本

1.2 v-v-html

1.3 数据双向绑定数据(v-model)

1.4 属性(v-bind)

1.5 表达式

1.6 class绑定

1.7 style绑定

1.8复选框

1.9下拉框

2.指令

2.1  v-if|v-else|v-else-if

2.2  v-show 

2.3  v-for

2.4  动态参数

3.过滤器

3.1.局部过滤器

3.2.全局过滤器

4.计算属性&监听属性

4.1.计算属性

4.2.监听属性

5.购物车案列(简单版本)

今日分享就结束!!!


1.插值

1.1 文本

插值表达式用户把vue中所定义的数据,显示在页面上. 插值表达式允许用户输入"JS代码片段"

语法:{{ 变量名/对象.属性名 }}

<p>文本</p> {{msg}} <br/>
<script type="text/javascript">
			new Vue({
				el:'#app',
				data(){
					return{
					msg:'hello a',
					}
				}
			})
			</script>

结果: 

1.2 v-v-html

v-html专门用来展示数据, 其作用和插值表达式类似但可以避免插值闪烁问题。

当网速比较慢时, 使用{{}}来展示数据, 有可能会产生插值闪烁问题。

​ 插值闪烁: 在数据未加载完成时,页面会显示出原始的{{}}, 过一会才会展示正常数据.

语法

<p>html解析</p> {{msg2}}<br/> 

区别

  • v-text/{{变量名/对象.属性名}}:把数据当作纯文本显示.
  • v-html:遇到html标签,会正常解析

1.3 数据双向绑定数据(v-model)

Vue的双向绑定可以实现: 数据变化的时候, 页面会自动刷新, 页面变化的时候,数据也会自动变化.

注意:

双向绑定, 只能绑定**“文本框,单选按钮,复选框,文本域,下拉列表”**等
文本框/单选按钮/textarea, 绑定的数据字符串类型
单个复选框, 绑定的是boolean类型
多个复选框, 绑定的是数组
select单选对应字符串,多选对应也是数组

1.4 属性(v-bind)

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

代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
	     <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>插值</title>
		<style type="text/css">
			.f30{
				font-size: 50px;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<!-- <p>文本</p> {{msg}} <br/> -->
			<p>html解析</p> {{msg2}}<br/>
			<b :class="msg3" v-html="msg2"></b>
			<!-- <p>表达式</p> 
			{{num+1}}
			{{warn.substr(0,6)}}
			<input v-model="ok"/>
			{{ok==1? '闪开' :'不闪开'}} -->
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				data(){
					return{
					// msg:'hello a',
					msg2:'<span style="color:pink">玛卡玛卡,我是个小聪明</span>',
					msg3:'f30',
					// num:6,
					// warn:'公主驾到通通闪开',
					// ok:1
					}
				}
			})
			</script>
	</body>
</html>

结果:

1.5 表达式

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

          {{str.substr(0,6).toUpperCase()}}

          {{ number + 1 }}

          {{ ok ? 'YES' : 'NO' }}

          <li v-bind:id="'list-' + id">我的Id是js动态生成的</li>

代码:

           <p>表达式</p> 
			{{num+1}}
			{{warn.substr(0,6)}}
			<input v-model="ok"/>
			{{ok==1? '闪开' :'不闪开'}}

            num:6,
			warn:'公主驾到通通闪开',
			ok:1

结果:

1.6 class绑定

  使用方式:v-bind:class="expression"

  expression的类型:字符串、数组、对象

代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
	     <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>插值</title>
		<style type="text/css">
			.f30{
				font-size: 50px;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<!-- <p>文本</p> {{msg}} <br/> -->
			<p>html解析</p> {{msg2}}<br/>
			<b :class="msg3" v-html="msg2"></b>
			<!-- <p>表达式</p> 
			{{num+1}}
			{{warn.substr(0,6)}}
			<input v-model="ok"/>
			{{ok==1? '闪开' :'不闪开'}} -->
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				data(){
					return{
					// msg:'hello a',
					msg2:'<span style="color:pink">玛卡玛卡,我是个小聪明</span>',
					msg3:'f30',
					// num:6,
					// warn:'公主驾到通通闪开',
					// ok:1
					}
				}
			})
			</script>
	</body>
</html>

结果:

1.7 style绑定

  v-bind:style="expression"

  expression的类型:字符串、数组、对象

代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
	     <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>插值</title>
		<style type="text/css">
			.f30{
				font-size: 50px;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<!-- <p>文本</p> {{msg}} <br/> -->
			<p>html解析</p> {{msg2}}<br/>
			<b :class="msg3" v-html="msg2"></b>
			<!-- <p>表达式</p> 
			{{num+1}}
			{{warn.substr(0,6)}}
			<input v-model="ok"/>
			{{ok==1? '闪开' :'不闪开'}} -->
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				data(){
					return{
					// msg:'hello a',
					msg2:'<span style="color:pink">玛卡玛卡,我是个小聪明</span>',
					msg3:'f30',
					// num:6,
					// warn:'公主驾到通通闪开',
					// ok:1
					}
				}
			})
			</script>
	</body>
</html>

结果:

1.8复选框

代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>指令</title>
	</head>
	<body>
		<div id="app">
			<!-- <p>v-if/v-else-if/v-else</p>
			<input v-model="score"/><br />
			<b v-if="score < 60 ">不及格</b>
			<b v-else-if="score >= 60 && score < 70">及格</b>
			<b v-else-if="score >= 70 && score < 80">一般</b>
			<b v-else-if="score >= 80 && score < 90">良好</b>
			<b v-else="">优秀</b> -->
			<!-- 60以下不及格
			60-70及格:
			70-80一般:
			80-90良好:
			90-100优秀:
			 -->
			<!-- <p>v-show</p>
			v-if与v-show的区别?<br>
			<b v-if="isShow">展示</b>
			<b v-show="isShow">展示</b> 
			 -->
		<!-- 	
			<p>v-for</p>
			<i v-for="a in arr">{{a}}&nbsp;&nbsp;</i> 
			<i v-for="a,u in users">{{a.name}}&nbsp;&nbsp;</i> -->
			
			<!-- <p>下拉框</p> 
			<select>
				<option v-for="h in hobby" :value="h.id">{{h.name}}</option>
			</select> --> 
			 <p>多选框</p>
			<div id="" v-for="h in hobby">
			<input type="checkbox" name="hobby" :value="h.id"/>{{h.name}}
			</div>
			
			<!-- <p>动态参数</p>
			<input v-model="click"/>
			<button v-on:[evname]="test">点我</button> -->
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				data(){
					return{
					score:88,
					isShow:false,
				// arr:[1,2,3,4],
				users:[{
					name:'游乐场',id:1
					},{
					name:'水上世界',id:2
					},{
					name:'k歌',id:3
					},{
					name:'动物园',id:4
					}],
					hobby:[{
					name:'吃汉堡',id:1
					},{
					name:'吃炸鸡',id:2
					},{
					name:'喝可乐',id:3
					},{
					name:'吃薯条',id:4
					}],
					evname:'click'
					}
				}
				,methods:{
					test(){
						// 单击事件
						alert("公主驾到通通闪开")
					}
				}
			})
			</script>
	</body>
</html>

结果:

1.9下拉框

代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>指令</title>
	</head>
	<body>
		<div id="app">
			<!-- <p>v-if/v-else-if/v-else</p>
			<input v-model="score"/><br />
			<b v-if="score < 60 ">不及格</b>
			<b v-else-if="score >= 60 && score < 70">及格</b>
			<b v-else-if="score >= 70 && score < 80">一般</b>
			<b v-else-if="score >= 80 && score < 90">良好</b>
			<b v-else="">优秀</b> -->
			<!-- 60以下不及格
			60-70及格:
			70-80一般:
			80-90良好:
			90-100优秀:
			 -->
			<!-- <p>v-show</p>
			v-if与v-show的区别?<br>
			<b v-if="isShow">展示</b>
			<b v-show="isShow">展示</b> 
			 -->
		<!-- 	
			<p>v-for</p>
			<i v-for="a in arr">{{a}}&nbsp;&nbsp;</i> 
			<i v-for="a,u in users">{{a.name}}&nbsp;&nbsp;</i> -->
			
			<p>下拉框</p> 
			<select>
				<option v-for="h in hobby" :value="h.id">{{h.name}}</option>
			</select> 
			<!-- <p>多选框</p>
			<div id="" v-for="h in hobby">
			<input type="checkbox" name="hobby" :value="h.id"/>{{h.name}} -->
			</div>
			
			<!-- <p>动态参数</p>
			<input v-model="click"/>
			<button v-on:[evname]="test">点我</button> -->
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				data(){
					return{
					score:88,
					isShow:false,
				// arr:[1,2,3,4],
				users:[{
					name:'游乐场',id:1
					},{
					name:'水上世界',id:2
					},{
					name:'k歌',id:3
					},{
					name:'动物园',id:4
					}],
					hobby:[{
					name:'吃汉堡',id:1
					},{
					name:'吃炸鸡',id:2
					},{
					name:'喝可乐',id:3
					},{
					name:'吃薯条',id:4
					}],
					evname:'click'
					}
				}
				,methods:{
					test(){
						// 单击事件
						alert("公主驾到通通闪开")
					}
				}
			})
			</script>
	</body>
</html>

结果:

 

2.指令

2.1  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">
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>指令</title>
	</head>
	<body>
		<div id="app">
			<p>v-if/v-else-if/v-else</p>
			<input v-model="score"/><br />
			<b v-if="score < 60 ">不及格</b>
			<b v-else-if="score >= 60 && score < 70">及格</b>
			<b v-else-if="score >= 70 && score < 80">一般</b>
			<b v-else-if="score >= 80 && score < 90">良好</b>
			<b v-else="">优秀</b>
			<!-- 60以下不及格
			60-70及格:
			70-80一般:
			80-90良好:
			90-100优秀:
			 -->
			<!-- <p>v-show</p>
			v-if与v-show的区别?<br>
			<b v-if="isShow">展示</b>
			<b v-show="isShow">展示</b>
			
			
			<p>v-for</p>
			<i v-for="a in arr">{{a}}&nbsp;&nbsp;</i> 
			<i v-for="i,u in users">{{u.name}}&nbsp;&nbsp;;{{i}}</i> 
			
			<p>下拉框</p>
			<select>
				<option v-for="h in hobby" :value="h.id">{{h.name}}</option>
			</select> -->
			<!-- <p>多选框</p>
			<div id="" v-for="h in hobby">
			<input type="checkbox" name="hobby" :value="h.id"/>{{h.name}}
			</div> -->
			
			<!-- <p>动态参数</p>
			<input v-model="click"/>
			<button v-on:[evname]="test">点我</button> -->
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				data(){
					return{
					score:88,
					isShow:false,
				arr:[1,2,3,4],
				users:[{
					name:'huahua',id:1
					},{
					name:'xiaomei',id:2
					},{
					name:'yanyan',id:3
					},{
					name:'heihei',id:4
					}],
					hobby:[{
					name:'吃汉堡',id:1
					},{
					name:'吃炸鸡',id:2
					},{
					name:'喝可乐',id:3
					},{
					name:'吃薯条',id:4
					}],
					evname:'click'
					}
				}
				,methods:{
					test(){
						// 单击事件
						alert("公主驾到通通闪开")
					}
				}
			})
			</script>
	</body>
</html>

结果:

2.2  v-show 

v-show指令与v-if指令类似,用于根据表达式的值来控制元素的显示和隐藏。当v-show指令的表达式的值为false时,元素会被渲染为不可见状态,并且会添加CSS样式"display:none"。这意味着该元素在页面上不会占据空间,并且不会显示给用户。

然而,v-show指令与加载出页面是不同的。当使用v-if指令时,如果条件为false,对应的元素将从DOM中完全移除,并且不会加载到页面上。

代码:

<b v-if="isShow">展示</b>
<b v-show="isShow">展示</b>

2.3  v-for

 类似JS的遍历

 遍历数组: 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">
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>指令</title>
	</head>
	<body>
		<div id="app">
			<!-- <p>v-if/v-else-if/v-else</p>
			<input v-model="score"/><br />
			<b v-if="score < 60 ">不及格</b>
			<b v-else-if="score >= 60 && score < 70">及格</b>
			<b v-else-if="score >= 70 && score < 80">一般</b>
			<b v-else-if="score >= 80 && score < 90">良好</b>
			<b v-else="">优秀</b> -->
			<!-- 60以下不及格
			60-70及格:
			70-80一般:
			80-90良好:
			90-100优秀:
			 -->
			<!-- <p>v-show</p>
			v-if与v-show的区别?<br>
			<b v-if="isShow">展示</b>
			<b v-show="isShow">展示</b> 
			 -->
			
			<p>v-for</p>
			<i v-for="a in arr">{{a}}&nbsp;&nbsp;</i> 
			<i v-for="a,u in users">{{a.name}}&nbsp;&nbsp;</i>
			
			<!-- <p>下拉框</p>
			<select>
				<option v-for="h in hobby" :value="h.id">{{h.name}}</option>
			</select> 
			 <p>多选框</p>
			<div id="" v-for="h in hobby">
			<input type="checkbox" name="hobby" :value="h.id"/>{{h.name}}
			</div> -->
			
			<!-- <p>动态参数</p>
			<input v-model="click"/>
			<button v-on:[evname]="test">点我</button> -->
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				data(){
					return{
					score:88,
					isShow:false,
				arr:[1,2,3,4],
				users:[{
					name:'游乐场',id:1
					},{
					name:'水上世界',id:2
					},{
					name:'k歌',id:3
					},{
					name:'动物园',id:4
					}],
					hobby:[{
					name:'吃汉堡',id:1
					},{
					name:'吃炸鸡',id:2
					},{
					name:'喝可乐',id:3
					},{
					name:'吃薯条',id:4
					}],
					evname:'click'
					}
				}
				,methods:{
					test(){
						// 单击事件
						alert("公主驾到通通闪开")
					}
				}
			})
			</script>
	</body>
</html>

结果:

2.4  动态参数

 从2.6.0开始,可以用方括号括起来的JavaScript表达式作为一个指令的参数

  <a v-bind:[attrname]="url"> ... </a>

  同样地,你可以使用动态参数为一个动态的事件名绑定处理函数

  <a v-on:[evname]="doSomething"> ... </a>

代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>指令</title>
	</head>
	<body>
		<div id="app">
			<!-- <p>v-if/v-else-if/v-else</p>
			<input v-model="score"/><br />
			<b v-if="score < 60 ">不及格</b>
			<b v-else-if="score >= 60 && score < 70">及格</b>
			<b v-else-if="score >= 70 && score < 80">一般</b>
			<b v-else-if="score >= 80 && score < 90">良好</b>
			<b v-else="">优秀</b> -->
			<!-- 60以下不及格
			60-70及格:
			70-80一般:
			80-90良好:
			90-100优秀:
			 -->
			<!-- <p>v-show</p>
			v-if与v-show的区别?<br>
			<b v-if="isShow">展示</b>
			<b v-show="isShow">展示</b> 
			 -->
		<!-- 	
			<p>v-for</p>
			<i v-for="a in arr">{{a}}&nbsp;&nbsp;</i> 
			<i v-for="a,u in users">{{a.name}}&nbsp;&nbsp;</i> -->
			
			<!-- <p>下拉框</p> 
			<select>
				<option v-for="h in hobby" :value="h.id">{{h.name}}</option>
			</select> 
			 <p>多选框</p>
			<div id="" v-for="h in hobby">
			<input type="checkbox" name="hobby" :value="h.id"/>{{h.name}}
			</div> -->
			
			<p>动态参数</p>
			<input v-model="click"/>
			<button v-on:[evname]="test">点我</button>
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				data(){
					return{
					score:88,
					isShow:false,
				// arr:[1,2,3,4],
				users:[{
					name:'游乐场',id:1
					},{
					name:'水上世界',id:2
					},{
					name:'k歌',id:3
					},{
					name:'动物园',id:4
					}],
					hobby:[{
					name:'吃汉堡',id:1
					},{
					name:'吃炸鸡',id:2
					},{
					name:'喝可乐',id:3
					},{
					name:'吃薯条',id:4
					}],
					evname:'click'
					}
				}
				,methods:{
					test(){
						// 单击事件
						alert("公主驾到通通闪开")
					}
				}
			})
			</script>
	</body>
</html>

结果:

3.过滤器

3.1.局部过滤器

代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<script src="date.js" type="text/javascript" charset="utf-8"></script>
		<title>过滤器</title>
	</head>
	<body>
		<div id="app">
			<p>局部过滤器基本应用</p>
			{{msg}}<br />
			{{msg | filterA}}
			<!-- <p>局部过滤器串行使用</p>
			{{msg}}<br />
			{{msg | filterA| filterB}}
			<p>局部过滤器传参</p>
			{{msg | filterC(1,4)}}<br /> -->
			<p>全局过滤器</p>
			{{time}}<br />
			{{time | fmtDateFilter}}
		</div>
		
		<script type="text/javascript">
			Vue.filter('fmtDateFilter',function(value) {
				// value表示过滤的内容
				return fmtDate(value);
			});
			
			
			new Vue({
				el:'#app',
				filters:{
					'filterA':function(v){
						return v.substring(0,6);
					},
					'filterB':function(v){
						return v.substring(2,4);
					},
					'filterC':function(v,begin,end){
						return v.substring(begin,end);
					}
				},
				data(){
					return{
					msg:'公主驾到通通闪开',
					time:new Date()
					};
					
					}
				,methods:{
					test(){
						// 单击事件
						alert("公主驾到通通闪开")
					}
				}
			})
			</script>
	</body>
</html>

结果:

注意:

  • 过滤器函数接受表达式的值作为第一个参数
  • 过滤器可以串联     

    {{ message | filterA | filterB }}

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

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

  • js定义一个类

    function Stu(){};

    Stu.prototype.add(a,b){};//添加一个新的实例方法

    Stu.update(a,b){};//添加一个新的类方法

3.2.全局过滤器

代码:

date.js

//给Date类添加了一个新的实例方法format
Date.prototype.format = function (fmt) {
	//debugger;
    var o = {
        "M+": this.getMonth() + 1,                 //月份
        "d+": this.getDate(),                    //日
        "h+": this.getHours(),                   //小时
        "m+": this.getMinutes(),                 //分
        "s+": this.getSeconds(),                 //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds()             //毫秒
    };
    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
};

function fmtDate(date, pattern) {
	var ts = date.getTime();
    var d = new Date(ts).format("yyyy-MM-dd hh:mm:ss");
    if (pattern) {
        d = new Date(ts).format(pattern);
    }
    return d.toLocaleString();
};

结果:

4.计算属性&监听属性

4.1.计算属性

计算属性就是一个提前定义好的方法, 该方法可以看作是一个特殊的值, 可以在插值表达式中使用

代码:

{<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
	     <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>计算属性</title>
	</head>
	<body>
		<div id="app">
			<p>计算属性</p> 
			单价:<input v-model="price"/>
			数量:<input v-model="num"/>
			小计:{{count}}
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				data(){
					return{
					price:88,
					num:1
					};
				},
				computed:{
					count:function(){
						return this.price * this.num;
					}
				}
				
			})
			</script>
	</body>
</html>

结果:

4.2.监听属性

 watch可以监听简单属性值及其对象中属性值的变化

​ watch类似于onchange事件,可以在属性值修改的时候,执行某些操作

代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
	     <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>计算属性</title>
	</head>
	<body>
		<div id="app">
			<!-- <p>计算属性</p> 
			单价:<input v-model="price"/>
			数量:<input v-model="num"/>
			小计:{{count}} -->
			<p>监听属性</p> 
			千米:<input v-model="km "/><br />
			米:<input v-model="m "/>
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:'#app',
				data(){
					return{
					price:88,
					num:1,
					m:1000,
					km:1
					};
				},
				computed:{
					count:function(){
						return this.price * this.num;
					}
				},
				watch:{
					km:function(v){
						// V指的是被监听的属性,是km
						this.m =parseInt(v) *1000;
					},
					m:function(v){
						// V指的是被监听的属性,是m 
						this.km =parseInt(v) /1000;
					}
				}
			})
			</script>
	</body>
</html>

结果:

5.购物车案列(简单版本)

代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<title>购物车</title>
	</head>
	<body>
		<div id="app">
			<h1 style="text-align: center;">购物车</h1>
			<table border="1" style="width: 100%; height: 80px;text-align: center;" >
				<thead>
				<tr>
					<th>商品</th>
					<th>单价</th>
					<th>数量</th>
					<th>小计</th>
				</tr>	
				</thead>
				
				<tbody>
					<tr>
						<td>炸鸡</td>
						<td>{{priceA}}</td>
						<td>
							<button @click="gooddelA">-</button>
							{{numA}}
							<button @click="goodaddA">+</button>
						</td>
						<td>{{countA}}</td>
					</tr>
					<tr>
						<td>炸薯条</td>
						<td>{{priceB}}</td>
						<td>
							<button @click="gooddelB">-</button>
							{{numB}}
							<button @click="goodaddB">+</button>
						</td>
						<td>{{countB}}</td>
					</tr>
					<tr>
						<td>汉堡</td>
						<td>{{priceC}}</td>
						<td>
							<button @click="gooddelC">-</button>
							{{numC}}
							<button @click="goodaddC">+</button>
						</td>
						<td>{{countC}}</td>
					</tr>
				</tbody>
				<tfoot>
					<tr>
						<td colspan="3">总价:</td>
						<td>{{total}}</td>
					</tr>
				</tfoot>
			</table>
		</div>
		
		<script>
		    new Vue({
		      el: '#app',
		      data: {
					priceA:30,
					priceB:10,
					priceC:20,
					numA:1,
					numB:1,
					numC:1
		      },
		      computed: {
		       countA:function(){
				   return this.priceA * this.numA;
			   },
			   countB:function(){
			   		   return this.priceB * this.numB;
			   },
			   countC:function(){
			   		   return this.priceC * this.numC;
			   },
			   total:function(){
				   return this.countA + this.countB +this.countC;
			   }
		      },
		      methods: {
		        goodaddA: function() {
		          return this.numA++;
		        },
				goodaddB: function() {
				  return this.numB++;
				},
				goodaddC: function() {
				  return this.numC++;
				},
				gooddelA: function() {
					if(this.numA>1){
						 return this.numA--;
					}
				},
				gooddelB: function() {
				 if(this.numB>1){
				 	 return this.numB--;
				 }
				},
				gooddelC: function() {
				if(this.numC>1){
					 return this.numC--;
				}
				},
		      }
		    });
		  </script>
	</body>
</html>

结果:

今日分享就结束!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1023767.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

fork函数

二.fork函数 2.1函数原型 fork()函数在 C 语言中的原型如下&#xff1a; #include <unistd.h>pid_t fork(void);其中pid_t是一个整型数据类型&#xff0c;用于表示进程ID。fork()函数返回值是一个pid_t类型的值&#xff0c;具体含义如下&#xff1a; 如果调用fork()的…

Vue3 菜鸟入门(一)超详细:介绍、安装、打包、创建项目、目录结构、起步等

【学习笔记】Vue3 菜鸟入门&#xff08;一&#xff09;超详细&#xff1a;介绍、安装、打包、创建项目、目录结构、起步等 关键词&#xff1a;Vue 、Vue 3、Java、Spring Boot、Idea、数据库、一对一、培训、教学本文主要内容含Vue3介绍、安装、打包、创建项目、目录结构、起步…

避雷器雷击计数器检验

试验目的 由于密封不良&#xff0c; 放电计数器在运行中可能进入潮气或水分&#xff0c; 使内部元件锈蚀&#xff0c;导致计数器不能正确动作&#xff0c; 因此需定期试验以判断计数器是否状态良好、 能否正常动作&#xff0c; 以便总结运行经验并有助于事故分析。 带有泄漏电…

[论文阅读] SADGA: Structure-Aware Dual Graph Aggregation Network for Text-to-SQL

“SADGA: Structure-Aware Dual Graph Aggregation Network for Text-to-SQL” 是一篇 text2sql 领域的论文&#xff0c;发布于 NeurIPS 2021。 原文链接&#xff1a;https://arxiv.org/abs/2111.00653 项目代码链接&#xff1a;https://github.com/DMIRLAB-Group/SADGA 总体…

exev函数族

一.exev函数族 1.1功能 exec()函数族的主要功能是在当前进程中运行一个新的程序。使用这些函数可以实现以下功能&#xff1a; 程序替换&#xff08;Program Replacement&#xff09;&#xff1a;调用exec()函数后&#xff0c;当前进程的代码和数据会被新程序的代码和数据替换…

【JDK 8-集合框架】5.4 allMatch 和 anyMatch 函数

一、allMatch 函数 二、anyMatch 函数 三、其它函数学习 四、实战 > 执行结果 一、allMatch 函数 检查是否 匹配所有元素&#xff0c;返回 true 二、anyMatch 函数 检查是否 至少匹配一个元素&#xff0c;返回 true 三、其它函数学习 看源码 入参&#xff0c;返回值…

【ElementUI】ElementUI Tooltip 根据内容判断是否显示、文字提示自定义样式

【ElementUI】ElementUI Tooltip 根据内容判断是否显示、文字提示自定义样式 封装组件自定义内容 <template><span v-if"[, null, undefined].indexOf(content) -1"><el-tooltip :content"content" effect"light" placement&q…

ENVI IDL:OMI-NO2产品均值计算与可视化(附Python代码)-年、季、月均值计算

目录 01 实验题目 02 我的IDL代码 03 实验给定IDL代码 04 Python代码实现 4.1 我的Python代码 4.2 实验给定Python代码 01 实验题目 计算/coarse_data/chapter_2/NO2/目录下所有OMI-NO2产品数据集ColumnAmountNO2TropCloudScreened的月均值、季均值、年均值&#xff0c;并…

风控基础——MOB、Vintage是什么?

▍Vintage背景 Vintag一词最初来源于葡萄酒业 。由于每年采摘的葡萄会受到日照、气温、降水等因素的影响&#xff0c;最终酿造的葡萄酒品质会存在差异。在窖藏一定年份后&#xff0c;葡萄酒的品质将趋于稳定&#xff0c;也就是品质成熟&#xff0c;这段年份数被称为成熟期。表…

广州华锐互动:利用VR复原文化遗址,沉浸式体验历史文物古迹的魅力

在过去的几十年里&#xff0c;科技发展飞速&#xff0c;为我们打开了无数新的视角和可能性。其中&#xff0c;虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;技术的崭新应用&#xff0c;为我们提供了一种全新的、近乎身临其境的体验历史的方式。本文将重点…

全网最全Kettle教程-Kettle概述

文章目录 第一章 Kettle概述1.1 Kettle发展历程1.2 Kettle简介1.3 Kettle相关俗语1.4 Kettle设计与组成1.5 Kettle功能模块1.6 Kettle的执行Transformation&#xff08;转换&#xff09;1.7 Kettle商业和社区版区别1.8 数据集成与ETL1.9 ETL工具比较 第一章 Kettle概述 1.1 Ke…

HTTP DNS的工作模式

HttpDNS 其实就是&#xff0c;不走传统的 DNS 解析&#xff0c;而是自己搭建基于 HTTP 协议的 DNS 服务器集群&#xff0c;分布在多个地点和多个运营商。当客户端需要 DNS 解析的时候&#xff0c;直接通过 HTTP 协议进行请求这个服务器集群&#xff0c;得到就近的地址。 这就相…

如何构建一个高质量的论文框架

一个高质量的论文框架对于论文撰写非常重要。它可以为你的研究提供一个有序和清晰的结构&#xff0c;突出你的研究贡献&#xff0c;简化写作难度&#xff0c;方便修改和审阅&#xff0c;并提升你的专业形象。因此&#xff0c;建议在撰写论文之前充分考虑并构建一个合适的论文框…

最全测试管理岗面试题(上)

1、怎么改善团队低迷现状&#xff1f; 改善团队低迷的现状是一个重要的管理挑战。以下是一些可能有助于改善团队状态的方法&#xff1a; ① 深入了解问题&#xff1a;首先&#xff0c;需要了解低迷的原因。这可能涉及与团队成员的个人会谈&#xff0c;收集反馈&#xff0c;观…

LeetCode(力扣)63. 不同路径 IIPython

LeetCode63. 不同路径 II 题目链接代码 题目链接 https://leetcode.cn/problems/unique-paths-ii/ 代码 class Solution:def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:m len(obstacleGrid)n len(obstacleGrid[0])if obstacleGrid[m - 1…

【算法】迷宫问题

文章目录 前言1.迷宫问题求解分步骤求解代码 2.迷宫最短路径求解代码 前言 迷宫问题本质就是一个图的遍历问题&#xff0c;从起点开始不断四个方向探索&#xff0c;直到走到出口&#xff0c;走的过程中我们借助栈记录走过路径的坐标。 栈记录坐标有两方面的作用&#xff0c;一…

Java返回日期格式问题

Java返回日期格式问题 解决方式&#xff1a; 方式一&#xff1a;在属性上加入注解&#xff0c;对日期进行格式化&#xff0c;每个都要加&#xff0c;比较繁琐。方式二&#xff1a;在WebMvcConfiguration中扩展Spring MVC的消息转换器&#xff0c;统一对日期类型进行格式化处理…

【第四阶段】kotlin语言的构造函数学习

1.主构造函数 package Kotlin.Stage4 //主构造函数&#xff0c;规范来说&#xff0c;都是增加_xxx的形式&#xff0c;临时的输入类型&#xff0c;不能直接用。需要接收下来&#xff0c;成为变量才能用。 class TestBase(_name:String,_sex:Char,_age:Int,_info:String){ //主…

浮点数运算精度的问题

每日鸡汤&#xff1a;每个你想要学习的瞬间都是未来的你像自己求救 经典面试题&#xff0c;浮点数运算精度的问题&#xff0c;以前一直没有遇到过&#xff0c;今天可算是遇到了&#xff0c;问题是这样的 有一个需求就是一个商品价值164元&#xff0c;然后有一个8折的优惠券&…

想要成为一名优秀的测试工程师,必须要遵守这8个测试原则

测试原则是一个测试人员时刻要铭记在心的&#xff0c;甚至要形成一种本能&#xff0c;指导测试工作。 原则1&#xff1a;测试找不出所有的Bug 软件的复杂性仅次于生命体&#xff0c;甚至现在很多软件都已经有了人工智能的属性。对于这样精妙的系统&#xff0c;一小点异常都有可…