Vue——基础语法篇

Vue——基础语法篇

author:木子六日

学习视频来源

coderwhy老师的vue教学

01.hello vue

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>hello vue!</title>
		<script src="js/vue.js"></script>
	</head>
	<body>
		<div id="div01">
			<h2>{{message}}</h2>
		</div>
		<div>
			{{message}}
		</div>
	</body>
	<script type="text/javascript">
		//let定义变量 const定义常量,尽量不要用var定义
		//另外要注意这个script要写在div后面嗷,不然就找不到了
		let app = new Vue({
			el:'#div01',//el这个东西代表了vue要管理的标签
			data:{		//这里面定义数据
				message:'有一说一vue这么写一点也不别扭,我已经爱上vue了'
			}
		})
	</script>
</html>

02.vue展示列表

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="div01">
			<h1>这写起来也太爽了吧。。。</h1>
			<ul>
				<li v-for="item in movies">{{item}}</li>
			</ul>
		</div>
		<script src="js/vue.js"></script>
		<script type="text/javascript">
			const app = new Vue({
				el:'#div01',
				data:{
					movies:['阳关灿烂的日子','鬼子来了','太阳照常升起','让子弹飞','一步之遥','邪不压正']
				}
			})
		</script>
	</body>
</html>

03.vue计数器案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
			<h2>当前计数:{{count}}</h2>
			<!-- 可以看到这种写法很方便,但是当逻辑比较复杂时就要写一个函数了 -->
			<!-- 
				<button type="button" v-on:click="count++">+</button>
				<button type="button" v-on:click="count--">-</button> 
			 -->
			<button type="button" v-on:click="count++">+</button>
			<!-- <button type="button" v-on:click="count--">-</button> -->
			<!-- v-on:click 还可以简写成@click -->
			<button type="button" @click="count--">- </button> </div> <script src="js/vue.js"></script>
				<script type="text/javascript">
					const app = new Vue({
						//el定义控制的标签
						el: '#app',
						//data定义数据
						data: {
							count: 0
						},
						//methods定义方法,有一说一,比js和jQuery写起来舒服多了
						methods: {
							add: function() {
								this.count++;
							},
							minus: function() {
								this.count--;
							}
						}
					})
				</script>
	</body>

</html>

04.v-once的使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>v-once的使用</title>
	</head>
	<body>
		<div id="app">
			<h2>{{message}}</h2>
			<!-- 加入v-once之后{{}}中的数据只会加载一次,不再动态改变 -->
			<h2 v-once>{{message}}</h2>
		</div>
		<script src="vue.js"></script>
		<script type="text/javascript">
			const app = new Vue({
				el:'#app',
				data:{
					message:'nihao'
				}
			})
		</script>
	</body>
</html>

05.v-html的使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>v-html的使用</title>
	</head>
	<body>
		<div id="app">
			<!-- v-html 将内容解析为html进行展示-->
			<h2 v-html="url"></h2>
		</div>
		<script src="js/vue.js"></script>
		<script type="text/javascript">
			const app = new Vue({
				el:'#app',
				data:{
					url:"<a href='https://www.baidu.com'>百度一下</a>"
				}
			})
		</script>
	</body>
</html>

06.v-text的使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>v-text的使用</title>
	</head>
	<body>
		<div id="app">
			<!-- v-text 用于展示文本,和{{}}效果一样,一般不使用-->
			<h2 v-text="message"></h2>
			<h2>{{message}}</h2>
		</div>
		<script src="js/vue.js"></script>
		<script type="text/javascript">
			const app = new Vue({
				el:'#app',
				data:{
					message:"丢雷楼某嗨"
				}
			})
		</script>
	</body>
</html>

07.v-pre的使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>v-pre的使用</title>
	</head>
	<body>
		<div id="app">
			<!-- v-pre相当于转译字符,将内容原样输出,类似python中字符串前加r-->
			<h2 v-pre>{{message}}</h2>
			<h2>{{message}}</h2>
		</div>
		<script src="js/vue.js"></script>
		<script type="text/javascript">
			const app = new Vue({
				el:'#app',
				data:{
					message:"丢雷楼某嗨"
				}
			})
		</script>
	</body>
</html>

08.v-bind的使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>v-bind的使用</title>
		<style type="text/css">
			.Red{
				color: red;
			}
			.Blue{
				color: blue;
			}
		</style>
	</head>
	<body>
		<!-- 
			v-bind用于操作元素样式
			之前的{{}}那些都是操作元素内容,相当于之前js的innerHTML
			现在这个v-bind是操作元素样式,相当于之前js的.style.什么什么
		 -->
		<div id="app" style="text-align: center;">
			<img v-bind:src="url1" width="400px" height="500px">
			<!-- v-bind的由于使用频繁,vue提供了简写的形式,直接写冒号就行了 -->
			<img :src="url2" width="400px" height="500px">
			<hr >
			<!-- v-bind操作class属性如下 -->
			<h1 v-bind:class="{Red:isRed,Blue:isBlue}">点击按钮改变颜色</h1>
			<button @click="changeClass">color change</button>
			<hr >
			<!-- v-bind操作style属性如下 -->
			<!-- 属性名尽量使用驼峰,因为-会被解析成减号,属性值可以在data中定义,若想直接写,需要加引号转义 -->
			<h5 :style="{fontSize:tempSize+'px'}" @click="changeSize">点击字体变大</h5>
		</div>
		<script src="js/vue.js"></script>
		<script type="text/javascript">
			const app = new Vue({
				el:"#app",
				data:{
					url1:"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1589563082654&di=abe029e125e1a7a4bc6982398a1b6270&imgtype=0&src=http%3A%2F%2F01.minipic.eastday.com%2F20161215%2F20161215154634_940b4d487aedf8f5c0931f7f3591781b_1.jpeg",
					url2:"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1589563500622&di=65e0fd8719641dac01b8b3e76f209da3&imgtype=0&src=http%3A%2F%2F01.minipic.eastday.com%2F20170511%2F20170511132714_a97930c96c5a47884752b81f8a5da89f_6.jpeg",
					isRed:true,
					isBlue:false,
					tempSize:50
				},
				methods:{
					changeClass:function(){
						this.isRed = !this.isRed;
						this.isBlue = !this.isBlue;
					},
					changeSize:function(){
						this.tempSize++;
					}
				}
			})
		</script>
	</body>
</html>

09.小练习

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>小练习</title>
		<style type="text/css">
			.Color{
				color: aquamarine;
			}
		</style>
	</head>
	<!-- 
		注意用索引值的方式对数组元素进行修改  不是响应式的  即页面不会发生改动(即使数组发生了变化)
		而其他对数组的改动全是响应式的
		如果真的要修改数组元素,可以使用slice方法,这个方法既可以插入又可以删除又可以修改
		
		删除:
		arr.slice(起始位置索引,删除几个)
		
		插入:
		arr.slice(起始位置索引,0,插入的元素)
		
		修改(相当于先删除后插入):
		arr.slice(起始位置索引,删除个数,...插入的元素)
	 -->
	<body>
		<div id="app">
			<ul>
				<li v-for="(item, index) in movies"
					:class="{Color:index === currentIdx}"
					@click="changeColor(index)">
					{{item}}
				</li>
			</ul>
		</div>
		<script src="js/vue.js"></script>
		<script type="text/javascript">
			const app = new Vue({
				el:'#app',
				data:{
					movies:['阳光灿烂的日子','鬼子来了','太阳照常升起','让子弹飞','一步之遥','邪不压正'],
					currentIdx:0
				},
				methods:{
					changeColor:function(index){
						this.currentIdx = index;
					}
				}
			})
		</script>
	</body>
</html>

10.computed计算属性

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>computed计算属性的使用</title>
	</head>
	<body>
		<div id="app">
			<h2>{{str3}}</h2>
			//两种写法等价
			<h2>{{str4()}}</h2>
			<br>
			<h2>书的总价是:{{totalPrice}}</h2>
		</div>
		<script src="js/vue.js"></script>
		<script type="text/javascript">
			const app = new Vue({
				el:'#app',
				data:{
					str1:"木子",
					str2:"六日",
					books:[
						{id:1,name:'数据结构与算法',price:40},
						{id:2,name:'计算机组成原理',price:29},
						{id:3,name:'操作系统',price:46},
						{id:4,name:'计算机网络',price:50},
					]
				},
				// computed用于计算属性,其实跟methods一样,只不过可以直接当成data中的变量来用
				//而且数据不改变的话只会加载一次
				computed:{
					str3:function(){
						return this.str1 + ' ' + this.str2;
					},
					totalPrice(){
						let res = 0;
						for(let i = 0;i<this.books.length;i++){
							res += this.books[i].price;
						}
						return res;
					}
				},
				// 等价于methods
				methods:{
					str4(){
						return this.str1 + ' ' + this.str2;
					}
				}
			})
		</script>
	</body>
</html>

11.v-on的修饰符

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>v-on的修饰符</title>
	</head>
	<body>
		<!-- 正常情况下点击按钮的时候div也会响应点击函数divClick
			为了使得div的点击函数不被响应,即防止btn冒泡,可以加入.stop修饰符修饰
		 -->
		<div id="app" @click="divClick">
			<button type="button" @click="btnClick">按钮1</button>
			<button type="button" @click.stop="btnClick">按钮2</button>
			<br><br>
			<form action="baidu" method="post">
				<!-- submit按钮默认有提交的功能,如果我们想阻止这一功能,就可以用.prevent修饰符修饰 -->
				<input type="submit" value="提交" @click.prevent.stop="submitClick"/>
			</form>
			<br>
			<!-- 监听具体某一按键的抬起,可以使用.键名的修饰符,比如监听回车键的修饰符就是.enter -->
			<input type="text" @keyup.enter="keyup" />
			<br><br>
			<!-- .once修饰符:使得只有第一次有效果,后面就都没效果了,不常用 -->
			<button type="button" @click.once="btnClick">只能被点击一次的按钮</button>
		</div>
		<script src="js/vue.js"></script>
		<script type="text/javascript">
			const app = new Vue({
				el:'#app',
				data:{
					
				},
				methods:{
					btnClick(){
						console.log('btnClick');
					},
					divClick(){
						console.log('divClick');
					},
					submitClick(){
						console.log('submitClick');
					},
					keyup(){
						console.log('按了一次回车键')
					}
				}
			})
		</script>
	</body>
</html>

12.v-if的使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>v-if的使用</title>
	</head>
	<body>
		<div id="app">
			<!-- 尽量少用,判断条件复杂的话尽量使用计算属性或者方法 -->
			<h2 v-if="score>=90">优秀</h2>
			<h2 v-else-if="score>=80">良好</h2>
			<h2 v-else-if="score>=60">及格</h2>
			<h2 v-else>不及格</h2>
			<!-- 这里带一下另一个知识点v-show,用法与v-if一样,
			不同的是当false的时候,v-show仍会出现在dom中,但是所在标签会有样式display:none -->
			<br>
			<h2 v-show="score<0">{{score}}</h2>
		</div>
		<script src="js/vue.js"></script>
		<script type="text/javascript">
			const app = new Vue({
				el:'#app',
				data:{
					score:92
				}
			})
		</script>
	</body>
</html>

13.filter、map和reduce三大函数介绍

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>三大函数</title>
	</head>
	<body>
		<script type="text/javascript">
			let arr = [1,23,45435,654,1234,1234,6,56]
			//filter函数,我们来筛选arr数组中小于100的数放到一个新的数组里面
			let newArr1 = arr.filter(function(n){
				return n<100;
			})
			//filter函数的参数是一个回调函数,n代表arr中的每一个元素,回调函数的返回值是布尔型,为true则加入新数组
			//为false则不加入,filter函数的返回值是一个新数组.
			console.log(newArr1)
			
			//map函数,我们来把newArr1中的每一个元素乘以2放到一个新的数组里面
			let newArr2 = newArr1.map(function(n){
				return n * 2;
			})
			//map函数的参数也是一个回调函数,返回值也是一个新的数组.
			//回调函数的返回值即为要在新数组中添加的元素
			console.log(newArr2);
			
			//reduce函数,我们来统计newArr2数组中元素的和
			let sum = newArr2.reduce(function(preValue,n){
				return preValue + n;
			},0)
			//reduce函数有两个参数,第一个参数是一个回调函数,第二个参数是preValue的初始值
			//回调函数的第一个参数是preValue,第二个参数是数组中的每一个元素
			//reduce函数的返回值是preValue的最终值
			console.log(sum);
			
			//如果把上面三个函数连起来写的话就是
			let total = arr.filter(function(n){
				return n<100
			}).map(function(n){
				return n*2
			}).reduce(function(preValue,n){
				return preValue+n;
			},0)
			console.log(total)
			
			//以下是极度装B写法
			let total2 = arr.filter(n => n<100).map(n => n*2).reduce((pre,n) => pre+n)
			console.log(total2)
		</script>
	</body>
</html>

14.v-model的使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<!-- v-model一般用于绑定表单标签,就是input哪些 -->
		<!-- v-model可实现双向绑定,即输入框中值的实时修改也会改变data中的值 -->
		<div id="app">
			<input type="text" v-model="message" />
			{{message}}
			
			<hr >
			<!-- v-model绑定radio单选框 -->
			<input type="radio" value="male" v-model="sex"/><input type="radio" value="female" v-model="sex"/>女
			你所选择的性别是:{{sex}}
			<hr >
			<!-- v-model绑定CheckBox复选框 -->
			<input type="checkbox" v-model="agree"/>是否同意
			<button type="button" :disabled="!agree">下一步</button>
			<hr >
			<input type="checkbox" value="basketball" v-model="hobbies" />打篮球
			<input type="checkbox" value="reading" v-model="hobbies" />看书
			<input type="checkbox" value="movie" v-model="hobbies" />看电影
			你的爱好是:{{hobbies}}
			<hr >
			<!-- v-model绑定下拉框select -->
			<select name="country" v-model="country">
				<option value ="中国">中国</option>
				<option value ="美国">美国</option>
				<option value ="俄罗斯">俄罗斯</option>
				<option value ="英国">英国</option>
				<option value ="法国">法国</option>
			</select>
			你选择的国家是:{{country}}
		</div>
		<script src="js/vue.js"></script>
		<script type="text/javascript">
			const app = new Vue({
				el:'#app',
				data:{
					message:'',
					sex:'male',
					agree:false,
					hobbies:[],
					country:"中国"
				}
			})
		</script>
	</body>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值