【持续更新】Vue2.0基础入门学习教程

安装

适合有一定Java后端和前端基础的
Vue的下载和安装可以参考这篇文章:https://blog.csdn.net/qq_41112238/article/details/105727188


Vue简介

概念
一套用于构建用户界面(用Vue往html页面中填充数据)的前端框架


特性
一、数据驱动视图(单向数据绑定)

  • 使用了Vue的页面中,Vue会监听数据变化自动重新渲染页面结构。就是说数据变化后,页面会自动更新。
    在这里插入图片描述

二、双向数据绑定

  • 在网页中,form表单负责采集数据,Ajax负责提交数据。
  • 填写表单时,双向数据绑定可以在不操作DOM的前提下自动把用户输入的数据填写到数据源中。也就是说,页面上表单采集的数据发生变化时,Vue会自动获取并更新到js中。
    在这里插入图片描述

MVVM
MVVM(Model View ViewModel)是Vue实现数据驱动视图和双向数据绑定的核心原理,它把每个HTML页面都拆分成这三部分:

  • Model:当前页面渲染时依赖的数据源
  • View:当前页面渲染的DOM结构
  • ViewModel:Vue的实例,把页面的数据源(Model)和页面结构(View)连接在了一起
    在这里插入图片描述

版本

  • 1.x版本:几乎被淘汰
  • 2.x版本:主流版本
  • 3.x版本:尚不成熟

Vue的基本使用

基本使用步骤
0、创建一个HTML文件
1、导入vue.js的script脚本文件
2、声明一个将要被Vue控制的DOM区域
3、创建Vue实例对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!-- 2.声明一个将要被Vue控制的DOM区域 -->
<!-- View视图区域,div的id和el里的值对应,用{{data中的属性名}}获取vue对象data中属性的具体数值 -->
<div id = "app">
    我的名字是:{{username}}
</div>
<!-- 1. 导入vue.js的script脚本文件 -->
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<script>
    //3.创建Vue实例对象
    new Vue({
        //el属性是固定写法,表示vm实例要控制的区域,接收的值是一个选择器
        el:'#app',
        //Model数据源区域,data对象是要渲染到页面上的数据
        data:{
            username:'假面骑士'
        }
    })
</script>
</body>
</html>

效果:
在这里插入图片描述


Vue指令

指令:为Vue开发者提供的模板语法,用于渲染页面的基本结构,包括以下六种:

内容渲染指令

渲染DOM元素的文本内容

v-text

示例:

<div id="app">
    <p v-text="username"></p>
</div>

缺点:会覆盖原有内容
效果:
在这里插入图片描述


{{ }}

插值表达式,用于解决v-text会覆盖原本值的问题,实际使用更多
示例:

<div id="app">
    <p>我的名字是{{username}}</p>
</div>

效果:
在这里插入图片描述
插值表达式中支持JavaScript表达式的运算:
例如:

<div id="app">
    {{ 1 > 0 ? 'YES' : 'NO'}}
</div>

效果:
在这里插入图片描述


v-html

优点:可以渲染带html标签的字符串
示例:

<div id="app">
    <p>我的名字是{{username}}</p>
    <p v-html="info"></p>
</div>
....
<script>
    new Vue({
        el:'#app',
        data:{
            username:'假面骑士',
            info:'<h1>Revice</h1>'
        }
    })
</script>

效果:
在这里插入图片描述


属性绑定指令

v-bind

插值表达式不能用在属性上,只能用在内容上
例如:

<div id="app">
    <input type="text" placeholder="{{tips}}">
</div>
....
<script>
    new Vue({
        el:'#app',
        data:{
            tips: '我的名字是假面骑士'
        }
    })

效果:
在这里插入图片描述
使用v-bind:

<div id="app">
    <input type="text" v-bind:placeholder="tips">
</div>

可以简写为冒号:

<div id="app">
    <input type="text" :placeholder="tips">
</div>

效果:
在这里插入图片描述
v-bind也支持JavaScript表达式运算:

<div id="app">
	//如果绑定内容需要动态拼接,字符串需要使用单引号''
    <input :value="'我的名字是'+tips">
</div>
...
<script>
    new Vue({
        el:'#app',
        data:{
            tips: '假面骑士'
        }
    })
</script>

效果:
在这里插入图片描述


事件绑定指令

v-on

语法:v-on:事件名称=事件方法
不绑定参数示例:

<div id="app">
    <p>我的存款余额是{{ money }}</p>
    <button v-on:click="addMoney">+1000</button>
    <button v-on:click="subMoney">-1000</button>
</div>
...
<script>
    new Vue({
        ...
        //定义事件方法 可写成:function,也可省略
        methods: {
            addMoney: function () {
            	//this是当前的Vue对象
                this.money += 1000;
            },
            subMoney() {
                this.money -= 1000;
            }
        }
    })
</script>

初始效果:
在这里插入图片描述
点击+1000按钮:
在这里插入图片描述
点击-1000按钮:
在这里插入图片描述
绑定参数示例:

<div id="app">
    <p>我的存款余额是{{ money }}</p>
    <button v-on:click="addMoney(9999)">得加钱</button>
</div>
...
<script>
    methods: {
        addMoney: function (n) {
            this.money += n;
        }
    }
</script>

效果:
在这里插入图片描述

简写方式:
使用@表示v-on:

<div id="app">
    <p>我的存款余额是{{ money }}</p>
    <button @click="addMoney(9999)">得加钱</button>
</div>

使用f()表示f : function()

<script>
    methods: {
        addMoney: function (n) {
            this.money += n;
        }
    }
</script>

$event

示例:

<div id="app">
    <p>我的存款余额是{{ money }}</p>
    <button @click="add">加钱</button>
</div>
...
<script>
    new Vue({
        el:'#app',
        data:{
            money: 0
        },
        methods: {
        	//不传参数时,默认收到的参数是事件对象event
            add(e) {
                this.money += 1;
                if (this.money % 2 === 0) {
                    e.target.style.backgroundColor = 'red';
                } else {
                    e.target.style.backgroundColor = 'green';
                }
            }
        }
    })
</script>

效果:
在这里插入图片描述在这里插入图片描述
传参数时,使用$event:

<button @click="add($event)">加钱</button>

<script>
...
   add($event) {
       this.money += 1;
       if (this.money % 2 === 0) {
           $event.target.style.backgroundColor = 'red';
       } else {
           $event.target.style.backgroundColor = 'green';
       }
   }
...
 </script>

事件修饰符
  • prevent(常用) 阻止默认行为(链接跳转、表单提交)
    代码:

    <div id="app">
        <a href="http://www.baidu.com" @click="f">跳转百度</a>
    </div>
    
    <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
    <script>
        new Vue({
            el:'#app',
            //定义事件方法
            methods: {
                f() {
    
                }
            }
        })
    </script>
    

    点击前:
    在这里插入图片描述
    点击后:
    在这里插入图片描述
    改为如下代码时,不会跳转:

    <a href="http://www.baidu.com" @click.prevent="f">跳转百度</a>
    
  • stop(常用) 阻止事件冒泡
    代码:

    <div id="app">
        <div @click="f1" style="height: 150px;background-color: #42b983;padding-left: 20px">
            <button @click="f2">按钮</button>
        </div>
    </div>
    
    <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
    <script>
        new Vue({
            el:'#app',
            methods: {
                f1() {
                    console.log("我是")
                },
                f2() {
                    console.log("假面骑士")
                }
            }
        })
    </script>
    

    点击“按钮”
    在这里插入图片描述
    观察控制台输出:
    在这里插入图片描述将代码改为:

     <button @click.stop="f2">按钮</button>
    

    点击观察控制台:
    在这里插入图片描述

  • capture 以捕获模式触发当前事件的处理函数

  • once 绑定的事件只触发一次

  • self 只有在event.target是自身元素时触发事件处理函数


按键修饰符
<div id="app">
    <!-- 按下ESC时调用clean方法,按下ENTER触发commit -->
    <input type="text" @keyup.esc="clean" @keyup.enter="commit">
</div>

<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<script>
    new Vue({
        el:'#app',
        //定义事件方法
        methods: {
            clean(e) {
                e.target.value = '';
            },
            commit(e) {
                e.target.value = '触发了commit方法';
            }
        }
    })
</script>

双向绑定指令

v-model

在不获取DOM的情况下,快速获取表单数据(input、textarea、seletct)
input示例:

<div id="app">
    <p>我的名字是:{{username}}</p>
    <!-- 双向绑定,改变了数据源,会影响p标签的值 -->
    <input type="text"  v-model="username">
    <!-- 单向绑定,未改变数据源,不会影响p标签的值 -->
    <input type="text"  :value="username">
</div>

效果:

select示例:

<div id="app">
    <select v-model="city">
    	<option value="">请选择:</option>
    	<option value="1">Revi</option>
    	<option value="2">Vice</option>
    	<option value="3">Revice</option>
    </select>
</div>

<script>
	 new Vue({
        el:'#app',
        data:{
            city: '3'
        }
    })
</script>

效果:


v-model 修饰符
  • number 自动将输入的值转为数值类型
    正常情况下input输入的是字符串,+做的是字符串拼接,使用.number可以将其转换为数值相加
    例:

    <div id="app">
        <input type="text" v-model.number="n1"> + 
        <input type="text" v-model.number="n2"> =
        <span>{{ n1 + n2}}</span>
    </div>
    
    <script>
    	 new Vue({
            el:'#app',
            data:{
                n1: 1,
                n2: 1
            }
        })
    </script>
    
  • trim 自动过滤首尾空白字符
    例:

    <input type="text" v-model.trim="username"> 
    
  • lazy 在“change”而非“input”时更新
    在值中间变化的过程中不会改变数据源
    例:

    <input type="text" v-model.trim="username"> 
    

条件渲染指令

v-if 和 v-show

区别:v-if直接将代码删除,v-show使用display属性隐藏元素。

  • 如果刚进入页面,某些元素默认不展示,后期也可能不需要使用,v-if更好。

  • 如果频繁切换元素的显示状态,使用v-show更好。
    例:

    	<div id="app">
    	    <p v-if="flag">这是v-if控制的元素</p>
    	    <p v-show="flag">这是v-show控制的元素</p>
    	</div>
    	
    	<script>
    		 new Vue({
    	        el:'#app',
    	        data:{
    	            flag: true
    	        }
    	    })
    	</script>
    

v-else-if

充当v-if的“else if”,可以连续使用,但必须配合v-if使用
例:

<div id="app">
    <p v-if="type==='A">优秀</p>
    <p v-else-if="type==='B">良好</p>
    <p v-else-if="type==='C">一般</p>
    <p v-else></p>
</div>

列表渲染指令

v-for

基于数组来循环渲染一个列表结构,语法:v-for="(item, index) in list"
例:

	<div id="app">
	    <table class="table table-bordered table-hover table-striped">
	    	<thread>
		    	<th>索引</th>
		    	<th>ID</th>
		    	<th>姓名</th>
	    	</thread>
	    	<tbody>
	    		<!-- 用到了v-for指令,一定要绑定一个key属性(字符串或数值),否则会报错,尽量把id作为它的值,因为key的值不允许重复否则报错:Duplicate keys detected,索引不具有唯一性不推荐作为 key值-->
	    		<tr v-for="(item, index) in list :key="item.id">
	    			<td>{{ index }}</td>
	    			<td>{{ item.id }}</td>
	    			<td>{{ item.name }}</td>
	    		</tr>
	    	</tbody>
	    </table>
	</div>

	<script>
		 new Vue({
	        el:'#app',
	        data:{
	            list:[
	            	{id: 1, name: 'revi'},
	            	{id: 2, name: 'vice'},
	            ]
	        }
	    })
	</script>

过滤器

过滤器常用于文本的格式化,可以用在两个地方:插值表达式和v-bind属性绑定。
过滤器应该被添加在JavaScript表达式的尾部,由管道符进行调用,例:

<!-- 使用filter1对message的值过滤 -->
<p>{{ message | filter1 }}</p>

<!-- 使用filter2对uid的值过滤 -->
<div v-bind:id =" uid | filter2"></div>

<script>
	const vm = new Vue({
		...
		filters:{
			//val表示管道符“|”前的值
			filter2(val){
				//过滤器中一定要有一个返回值,如果uid=1,现在返回2
				return val + 1
			}
		}
	});
</script>

私有过滤器和全局过滤器

在filters节点下定义的过滤器属于“私有过滤器”,只在当前Vue对象控制的el区域内有效。如果希望在多个Vue实例间共享过滤器,需要定义全局过滤器,例:

Vue.filter('filterName',(val) => {
	return ....
})

如果全局过滤器和私有过滤器名字一样,调用的是私有过滤器。(就近原则)


连续调用过滤器

例:

<p>{{ message | filter1 | filter2}}</p>

侦听器

watch侦听器

监视数据的变化,对数据的变化做特定操作,例:

const vm = new Vue({
	data: {username: ' '},
	//侦听器写到watch节点下,监视的数据名作为方法名
	watch: {
		//监听username值的变化,第一个参数是新值,第二个是旧值
		username(newVal, oldVal) {
		}
	}
})

判断用户名是否被占用
<script>
	new Vue({
		data: {username: ' '},
		watch: {
			username(newVal) {
				$.get('后端url' + newVal, function (result) {
					if() ....
				})
			}
		}
	})
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值