vue day(1)

一、基本语法

1.1 基本概念

  • el: 对应标签中的id属性
    希望被vue渲染的一部分指定对应的ID,不希望被渲染的不指定其ID
  • data:对应标签中的对应变量
  • methods:对应标签中的方法

{{}}中可以是变量,基本类型,表达式,方法,方法是{{method()}}这种形式,字符串类型是{{‘str’}}。

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
	<script src="vue.js"></script>
</head>
<body>
	<div id="name">
		<h1>{{haha}}</h1>
		<h1>{{10+32}}</h1>
		<h1>{{'张三'}}</h1>
		<h1>{{getSth()}}</h1>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#name',
			data:{
				haha: "jack love rose",
			},
			methods:{
				getSth: function(){
					return "i like java";
				}
			}
		})
	</script>
</body>
</html>

1.2 测试

在这里插入图片描述可以在控制台获取vm变量,同时也可以对里面的变量进行赋值。

1.3 指令

  • v-html
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
	<script src="vue.js"></script>
</head>
<body>
	<div id="name">
		<div v-html="sort"></div>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#name',
			data:{
				sort: "<b>11111<b>"
			},
		})
	</script>
</body>

在这里插入图片描述

  • v-show
    动态显示与隐藏,其实是display属性
<body>
	<div id="name">
		<div v-show="sort">显示了</div>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#name',
			data:{
				sort: true
			},
		})
	</script>
</body>
  • v-if
    动态的创建与删除
<body>
	<div id="name">
		<div v-if="sort">动态的创建与删除</div>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#name',
			data:{
				sort: true
			},
		})
	</script>
</body>

1.4 动态绑定class

  • 动态绑定class对象写法
<body>
	<div id="start">
		<div :class="obj">动态绑定class对象</div>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				obj:{
					a: true,
					b: false
				}
			},
		})
	</script>
</body>

在这里插入图片描述* 动态绑定class数组写法
可以使用pop和push方法往class中添加属性

<body>
	<div id="start">
		<div :class="obj">动态绑定classs数组写法</div>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				obj:["a","b"]
			},
		})
	</script>
</body>

1.5 动态绑定style

  • 动态绑定style对象写法
<body>
	<div id="start">
		<div :style="obj">动态绑定classs数组写法</div>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				obj:{
					color: "red"
				}
			},
		})
	</script>
</body>
  • 动态绑定style数组写法
    可以往里面添加属性
<body>
	<div id="start">
		<div :style="obj">动态绑定classs数组写法</div>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				obj:[{color:"yellow"}]
			},
		})
	</script>
</body>
  • 控制台中改变属性
vm.obj.push({fontSize:"60px"})
vm.obj.push({color:"black"})

1.6 条件渲染

  • 代码
<body>
	<div id="start">
		<button @click="handleClick()">购物</button>
		<ul v-if="order.length != 0">
			<li v-for="list in order">
				{{list}}
			</li>
		</ul>
		<div v-else>你的购物车是空的</div>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				order:[]
			},
			methods: {
				handleClick(){
					this.order = ["111","222","333"];
				}
			}
		})
	</script>
</body>
  • 效果
    在这里插入图片描述

1.7 列表渲染

  • 对数组的便利
  • 对对象的便利
<body>
	<div id="start">
	  <ul>
		  <li v-for="(item,index) in order">
			  {{item}}"----"{{index}}
		  </li>
	  </ul>
	  <ul>
		  <li v-for="(item,key) in student">
			  {{item}}"---"{{key}}
		  </li>
	  </ul>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				order:["111","222","333"],
				student:{
					name:"张三",
					age:12,
					address:"西安"
				}
			},
		})
	</script>
</body>
  • 可以在便利的时候设置对应的key值
    一般key是设置为data.id,便于前端渲染时减少对比两次数据的次数。
 <li v-for="(item,index) in order" key="item">

1.8 增添新的属性

  • Vue.set()方法
    在这里插入图片描述

1.9 对数组的操作

  • 会改变原数组
    pop(),push(),sort(),reverse(),splice(),shift(),unshift()
  • 不会改变原数组
    filter(),map(),concat(),slice()
  • 通过索引操作数组
    会改变数组,但是视图不会被渲染

在这里插入图片描述

1.10 数组索引解决方法

  • splice(0,1,555)
    在这里插入图片描述
  • vue的set方法
    在这里插入图片描述

1.11 给对象添加属性

在这里插入图片描述

二、基本语法

2.1 数据的简单过滤

  • v-model数据的双向绑定
  • @input value值改变就出发对应的事件
<body>
	<div id="start">
	 <input v-model="name" @input="handlerInput()">
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				name: ""
			},
			methods: {
				handlerInput(){
					console.log(this.name);
				}
			}
		})
	</script>
</body>
  • filter()方法
<body>
	<div id="start">
	 <input v-model="name" @input="handlerInput()">
	 <ul>
		 <li v-for="(item,index) in list">
			 {{item}}
		 </li>
	 </ul>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				name: "",
				list:["aaa","aab","acc","ddd","eee"],
				oldlist:["aaa","aab","acc","ddd","eee"],
			},
			methods: {
				handlerInput(){
					console.log(this.name);
					var list2 = this.oldlist.filter(item=>item.indexOf(this.name) > -1)
					this.list = list2;
				}
			}
		})
	</script>
</body>

在这里插入图片描述

filter()方法对原数组不产生影响。

2.2 事件处理

<body>
	<div id="start">
	 <button @click="handleClick">click</button>
	 <div v-show="start">隐藏还是显示</div>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				start: false
			},
			methods: {
				handleClick(){
					this.start = !this.start;
				}
			}
		})
	</script>
</body>

2.3 事件修饰符

  • 冒泡事件
    点击一个事件,会触发对应的其他事件,比如点击触发li上的事件,也会触发ul上的事件。
<body>
	<div id="start">
	 <ul @click="click1()">
		 <li @click="click2()">11111</li>
	 </ul>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				start: false
			},
			methods: {
				click1(){
					console.log("click1");
				},
				click2(){
					console.log("click2");
				}
			}
		})
	</script>
</body>
  • 冒泡事件
    此处的stop就可以阻止冒泡事件
	 <ul @click="click1()">
		 <li @click.stop="click2()">11111</li>
	 </ul>

还可以:

self会判断是不是自己本身触发的事件,如果是孩子冒泡上来的,则阻止。

 <ul @click.self="click1()">
		 <li @click="click2()">11111</li>
	 </ul>

还可以:

 <ul @click="click1()">
		 <li @click.once="click2()">11111</li>
	 </ul>
  • 阻止默认行为
    比如阻止a标签的跳转行为
<body>
	<div id="start">
	<a href="http://www.baidu.com" @click.prevent="click3()">百度</a>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				start: false
			},
			methods: {
				click3(){
					console.log("跳转了");
				}
			}
		})
	</script>
</body>
  • once修饰符在父标签修饰符为self时才会触发一次

2.4 按键修饰符

  • 回车键触发事件(回车键对应的按键码是13)
    @keyup.enter
<body>
	<div id="start">
	<input @keyup.enter="enter()">
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				start: false
			},
			methods: {
				enter(){
					console.log("触发回车事件");
				}
			}
		})
	</script>
</body>
  • @keyUp.1 = “…”
    点击键值是1的键触发事件

2.5 表单控件绑定

  • 判断打没打勾

只需绑定一个变量判断打没打勾就行

<body>
	<div id="start">
	<input type="checkbox" v-model="checked">勾了没
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				checked:false
			},
		})
	</script>
</body>
  • 多选获得多选的结果
    value:对应选中框的值
<body>
	<div id="start">
	<input type="checkbox" v-model="checkedgrp" value="游泳">游泳
	<input type="checkbox" v-model="checkedgrp" value="打篮球">打篮球
	<input type="checkbox" v-model="checkedgrp" value="打兵乓球">打兵乓球
	{{checkedgrp}}
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				checkedgrp:[]
			},
		})
	</script>
</body>
  • 单选
    linpue的类型是: redio
<body>
	<div id="start">
		<P>
			<input type="radio" v-model="picked" value="java">java
			<input type="radio" v-model="picked" value="php">php
			<input type="radio" v-model="picked" value="python">python
			{{picked}}
		</P>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				picked:"",
			},
		})
	</script>
</body>
  • 商品订单模拟
<body>
	<div id="start">
		<li  v-for="(item,index) in goods">
			<input type="checkbox" :value="item" v-model="goodslist">
			 {{item.name + " " + item.price + " " + item.count}}
			</input>
	    </li> 
		<p>商品的总价是:{{getPrice()}}</p>
		<p>订单:{{goodslist}}</p>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				goods:[{
					id:1,
					name:"辣椒",
					price:10,
					count:1
				},
				{
					id:1,
					name:"火腿",
					price:20,
					count:2
				},
				{
					id:1,
					name:"西红柿",
					price:30,
					count:0
				},
				],
				goodslist:[],
			},
			methods:{
					getPrice(){
						var sum = 0;
						for(var i in this.goodslist){
                           sum += this.goodslist[i].price * this.goodslist[i].count;
						}
						return sum;
					}
				}
		})
	</script>
</body>

在这里插入图片描述

  • 全选和全不选
<body>
	<div id="start">
		<input type="checkbox" v-model="choose" value="{{choose}}" @change="chooseall()">
		<li  v-for="(item,index) in goods" @change="judjeChooseAll()">
			<input type="checkbox" :value="item" v-model="goodslist">
			 {{item.name + " " + item.price + " " + item.count}}
			</input>
	    </li> 
		<p>商品的总价是:{{getPrice()}}</p>
		<p>订单:{{goodslist}}</p>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				choose:false,
				goods:[{
					id:1,
					name:"辣椒",
					price:10,
					count:1
				},
				{
					id:1,
					name:"火腿",
					price:20,
					count:2
				},
				{
					id:1,
					name:"西红柿",
					price:30,
					count:0
				},
				],
				goodslist:[],
			},
			methods:{
				getPrice(){
						var sum = 0;
						for(var i in this.goodslist){
                           sum += this.goodslist[i].price * this.goodslist[i].count;
						}
						return sum;
					},
				judjeChooseAll(){
                    if(this.goods.length === this.goodslist.length){
						this.choose = true;
					}else{
						this.choose = false;
					}
				},
				chooseall(){
					if(this.choose === true){
						this.goodslist = this.goods;
					}else{
						this.goodslist = [];
					}
				}
				
			}
		})
	</script>
</body>

在这里插入图片描述

  • 增加减少商品数量
<body>
	<div id="start">
		<input type="checkbox" v-model="choose" value="{{choose}}" @change="chooseall()">
		<li  v-for="(item,index) in goods" @change="judjeChooseAll()">
			<input type="checkbox" :value="item" v-model="goodslist">
			 {{item.name + " " + item.price + " " + item.count}}
			 <button @click="delGoodsCount(item)">del</button>{{item.count}}<button @click="{{item.count++}}">add</button>
			</input>
	    </li> 
		<p>商品的总价是:{{getPrice()}}</p>
		<p>订单:{{goodslist}}</p>
	</div>
	<script type="text/javascript">
		var vm = new Vue({
			el:'#start',
			data:{
				choose:false,
				goods:[{
					id:1,
					name:"辣椒",
					price:10,
					count:1
				},
				{
					id:1,
					name:"火腿",
					price:20,
					count:2
				},
				{
					id:1,
					name:"西红柿",
					price:30,
					count:0
				},
				],
				goodslist:[],
			},
			methods:{
				getPrice(){
						var sum = 0;
						for(var i in this.goodslist){
                           sum += this.goodslist[i].price * this.goodslist[i].count;
						}
						return sum;
					},
				judjeChooseAll(){
                    if(this.goods.length === this.goodslist.length){
						this.choose = true;
					}else{
						this.choose = false;
					}
				},
				chooseall(){
					if(this.choose === true){
						this.goodslist = this.goods;
					}else{
						this.goodslist = [];
					}
				},
				delGoodsCount(data){
				   var number = data.count--;
				   if(number <= 1){
					   data.count = 1;
				   }
				}
				
			}
		})
	</script>
</body>

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值