vue

vue

一.概述

官网:https://cn.vuejs.org

Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

vue的俩个核心点

1.相应的数据绑定
2.组合的视图组件

MVVM模式

1.M:Model 数据模型
2.V:view 视图模型
3.vm:view-Model 视图模型

二.入门案例

步骤:

1.将库文件下载并粘贴

2.创建vue对象

3.传id,找标签

案例演示:

<script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
	<script type="text/javascript">
		window.onload=function(){
		//创建vue对象
		new Vue({
			el:'#box',
			data:{
			msg:'Hello Vue',
			wz:'http://www.baidu.com'
				}
		});
			}	
	</script>
<body>
<div id="box">
  {{msg}}
  <a v-bind:href="wz">进入百度</a>
 
</div>
</body>

v-bind可以简写为 :

三.模板语法

1.概述

可以在页面取data 对象中数据
模板语法 会支持一些 JS 简单的运算符和函数

{{键名}}
v-text=“键名” //取数据
v-html=“键名” //可以转义html标签(加粗标签等)

2.属性

HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:

<div id="app">
  <label for="r1">修改颜色</label><input type="checkbox" v-model="use" id="r1">
  <br><br>
  <div v-bind:class="{'class1': use}">
    v-bind:class 指令
  </div>
</div>
    
<script>
new Vue({
    el: '#app',
  data:{
      use: false
  }
});
</script>

3.表达式

<div id="app">
    {{5+5}}<br>
    {{ ok ? 'YES' : 'NO' }}<br>
    {{ message.split('').reverse().join('') }}
</div>
    
<script>
new Vue({
  el: '#app',
  data: {
    ok: true,
    message: 'RUNOOB',
  }
})
</script>

输出:
10
YES
BOONUR

4.指令

指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:

<div id="app">
    <p v-if="seen">你好</p>
</div>
    
<script>
new Vue({
  el: '#app',
  data: {
    seen: true
  }
})
</script>

5.参数

参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:

<div id="app">
    <pre><a v-bind:href="url">菜鸟教程</a></pre>
</div>
    
<script>
new Vue({
  el: '#app',
  data: {
    url: 'http://www.runoob.com'
  }
})
</script>

另一个例子是 v-on 指令,它用于监听 DOM 事件:

<a v-on:click="doSomething">

6.修饰符

修饰符是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。
例如,.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault():

<form v-on:submit.prevent="onSubmit"></form>

7.用户输入

在 input 输入框中我们可以使用 v-model 指令来实现双向数据绑定:

<div id="app">
    <p>{{ message }}</p>
    <input v-model="message">
</div>
    
<script>
new Vue({
  el: '#app',
  data: {
    message: 'Runoob!'
  }
})
</script>

8.缩写

Vue.js 为两个最为常用的指令提供了特别的缩写

v-bind 缩写

<!-- 完整语法 -->
<a v-bind:href="url"></a>
<!-- 缩写 -->
<a :href="url"></a>

v-on 缩写

<!-- 完整语法 -->
<a v-on:click="doSomething"></a>
<!-- 缩写 -->
<a @click="doSomething"></a>

四.事件

1.事件对象

(1)如何传递事件对象

例:show($event)

(2)阻止默认行为prevent

例:@click.prevent=“show()”

(3)阻止冒泡stop

例:@click.stop=“show()”

(4)事件只执行一次once

例:@click.once=“show()”

(5)监听键盘按键

例:@keypress.enter=“show()”

2.事件案例演示

案例演示

<script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
<script type="text/javascript">
   window.onload=function(){
		new Vue({
			el:'#box',
			data:{
				msg:'Hello Vue'
				},
           //事件的处理函数
			methods:{  
					show:function(){
					alert(this.msg);
					},
					show2:function(){
					alert("haha");
			        },
			//ES6语法
					show3(){
					alert("show3333");
					        },
				    show4(event){
						//阻止默认行为
						event.preventDefault() 
						
						//阻止冒泡
						event.stopPropagation()	
						},
						test(){
						alert("hehe");
						}
					}
				})
			}
			</script>
	</head>
	<body>
		<div id="box">
			<!-- 采用 指令 v-on:事件名 -->
			<button v-on:click="show()">一个按钮1</button>
			<!-- 事件只执行一次 @click.once -->
			<button v-on:click.once="show2()">一个按钮2</button>
			<!-- 绑定事件的简写方式 采用 @事件名-->
			<button @click="show3()">一个按钮3</button>
			<!-- 如何传递事件对象 $event -->
			<button v-on:click="show4($event)">一个按钮4</button>
			<!-- vue阻止默认行为 @click.prevent -->
			<a href="http://www.baidu.com" @click.prevent="test()">进入百度</a>
			<!--vue 阻止冒泡行为 @click.stop类似 -->
			
		</div>
	</body>

五.表单数据绑定

针对表单的数据绑定:v-model=“键名”

<script type="text/javascript">
			window.onload = function() {
				new Vue({
					el: '#box',
					data: {
						msg: 'Hello Vue',
					}
				});
			}
		</script>
	<body>
		<div id="box">
			<!--  v-model 表单的数据绑定-->
			<input type="text" id="" value="" v-model="msg" />
			<h1>{{msg}}</h1>
			<input type="text" id="" value="" v-model="msg" />
		</div>
	</body>

六.隐藏和显示

v-show=“true” //控制元素的显示与隐藏

案例演示

<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#nei {
				width: 200px;
				height: 200px;
				background: red;
			}
		</style>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript">
			window.onload = function() {
				new Vue({
					el: '#box',
					data: {
						msg: 'Hello Vue',
						flag:true
					},
					methods:{
						isShow(){
							//this 代表vue对象
						 this.flag=!this.flag	
						}
					}
				});
			}
		</script>
	</head>
	<body>
		<div id="box">
			<!--  v-show="true" true 元素显示 false 元素隐藏-->
			<div id="nei" v-show="flag">
				
			</div>
			<button type="button" @click="isShow()">显示/隐藏</button>
			
				<button type="button" @click="flag=!flag">显示/隐藏2</button>
		</div>
	</body>
</html>

七.计算属性

利用计算属性反转字符串实例演示

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div id="app">
  <p>原始字符串: {{ message }}</p>
  <p>计算后反转字符串: {{ reversedMessage }}</p>
</div>

<script>
var vm = new Vue({
  el: '#app',
  data: {
    message: 'Hello'
  },
  computed: {
    // 计算属性的 getter
    reversedMessage: function () {
      // `this` 指向 vm 实例
      return this.message.split('').reverse().join('')
    }
  }
})
</script>
</body>
</html>

八.监听属性

计数器案例演示:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id = "app">
 <p style = "font-size:25px;">计数器: {{ counter }}</p>
 <button @click = "counter++" style = "font-size:25px;">点我</button>
</div>
<script type = "text/javascript">
 var vm = new Vue({
    el: '#app',
    data: {
       counter: 1
    }
 });
 vm.$watch('counter', function(nval, oval) {
    alert('计数器值的变化 :' + oval + ' 变为 ' + nval + '!');
 });
</script>
</body>
</html>

九.属性的绑定

class 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。

Vue v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。

在绑定过程中css样式名如果有-则去掉,需要把-后第一个字母变大写

1.class属性的绑定

方式一 :

可以绑定一个或多个选择器

绑定方式

一个class选择器的名称:class=" ‘aclass’ "

<h1 :class="['bClass','aClass']">222222222222</h1>

注意 选择器的名称用单引号引起来

方式二 :

当绑定值是一个变量时:

<script>
//假设在data中有m1、m2这一个变量,其他省略
data:{
m1:aClass
m2:bClass
}
</script>
绑定多个变量用[]括起来
<h1 :class="[m1,m2]">2222222222</h1>
选择器生效功能

true 生效,false 不生效

<h1 :class="{'aClass':true,'bClass':false}">5555555555555555555</h1>

2.style属性的绑定

绑定方式一:

注意:值要使用单引号引起来


<h1 :style="{color:'red',fontSize:'100px'}">1111111111</h1>

值可以设置为变量,当值作为变量时

<h1 :style="{color:a,fontSize:b}">2222222</h1>
绑定方式二:

直接绑定变量

<h1 :style="[myjson,myjson2]">2222222</h1>

十.一些指令

1.if条件指令

flag为true则会执行正确,否则执行错误

<h1 v-if="flag">正确</h1>
<h1 v-else>错误</h1>
多重条件选择

定义一个变量v设置其为输入值

<h1 v-if="v=1">1你好</h1>
<h1 v-else-if="v==2">2你好</h1>
<h1 v-else-if="v==3">3你好</h1>
<h1 v-else-if="v==4">4你好</h1>
<h1 v-else>好好输</h1>

2.循环指令

<script type="text/javascript">
	window.onload = function() {
		new Vue({
			el: '#box',
			data: {
			myArr: [10, 20, 30, 40, 50, 60, 70, 80, 80],
			myJson: {
				sername: 'zhangsan',
				age: 100,
				phone: '13962052305'
					},
			jsonArry: [{
					username: 'lisi',
					age: 200,
					phone: '13962052305'
					}, {
					username: 'wangwu',
					age: 300,
					phone: '13962052305'
					}, {
					username: '赵六',
					age: 400,
					phone: '13962052305'
						}]
					}
				});

			}
</script>
<body>
  <div id="box">
	<ul>
为了给 Vue 一个提示,以便它能跟踪每个节点的身份,
从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性
		<li v-for="(ele,index) in myArr" :key="index">
		{{ele}}----{{index}}
		</li>
	</ul>
	 遍历JSON对象
	<ul>
		<li v-for="(value,key,index)  in myJson" :key="key">
		{{value}}-----{{key}}----{{index}}
		</li>
	</ul>
	遍历 JSON数组
	<ul>
		<li v-for="(obj,index) in jsonArry" :key="index">
		{{obj.username}}----{{obj.age}}----{{obj.phone}}----{{index}}
		</li>
	</ul>
  </div>
</body>
可以根据索引对数组中的数据进行删除与修改
<script type="text/javascript">
	methods: {
			deleteObj(index) {
            //根据索引删除
			//splice() 删除元素,并向数组添加新元素。 
			this.myArr.splice(index, 1);
			},
						
			//更新,向数据中添加50
			updateObj:function(index,obj){
			this.myArr.splice(index,1,50);
             }
				}
</script>

十一.表单的数据收集

可以使用v-model绑定,在函数内部收集数据用Ajax提交到后台

用Ajax的方式把数据提交到后台,就得阻止掉表单默认的提交行为
具体实现如下:

<form action="123.html" method="get"  @submit.prevent="tijao()">
用户名:<input type="text" name="username" v-model="myJson.username"/><br>
密码:<input type="password" name="password" v-model="myJson.password"/><br>
<input type="submit" value="提交"/>
</form>
<script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
<script>
function(){
new Vue({
		el:'#box',
		data:{
		myJson:{
		username:'',
		password:''
				}	
			},
methods:{
		tijao(){
		alert(this.myJson.username);
		alert(this.myJson.password);
		//收集表单中的数据
			console.log(this.username);
			console.log(this.password);
			//Ajax 请求 把表单中的数据提交到后台			
				}
						
}
</script>

十二.Ajax请求

Ajax是在无需重新加下整个网页的情况下,能够更新部分网页的技术

1.原生的Ajax请求

1.创建异步请求的对象

2.向服务器发送请求

3.准备好接收服务器的响应

<script type="text/javascript">
	//创建异步请求对象
	var xmlhttp;
	if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
		xmlhttp = new XMLHttpRequest();
	}

// 向服务器发送请求
// 如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:
//打开连接 GET
xmlhttp.open("GET", "https://api.github.com/search/users?q=a", true);
//发送请求
xmlhttp.send();

//准备好介绍,服务器的相应
xmlhttp.onreadystatechange = function() {
	if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
	//接收服务器响应的文本数据
	var text=xmlhttp.responseText;
	document.getElementById("myDiv").innerHTML =text;
	}
	}
</script>

2.vue的Ajax请求

<script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script>
<script type="text/javascript">
window.onload = function() {
	new Vue({
		el: '#box',
		data: {
			myarr: []
			},
		methods: {
			get: function() {
			//发送get请求
			this.$http.get('https://api.github.com/search/users', {
		    params: {
			   q: 'aa'
				    }
			            }).then(function(res) {
		//res 响应对象 里面的 data 属性,取出响应体,这个响应体就是 json对象
			     this.myarr = res.body.items;
			     }, function() {
				     console.log('请求失败处理');
				    });
				 }
			}
		});
}
		</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值