Vue保姆级入门教程

Posted 芝士就是Power

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue保姆级入门教程相关的知识,希望对你有一定的参考价值。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Vue

1.1 Vue介绍

1.2 Vue特点

  • 遵循 MVVM 模式
  • 编码简洁, 体积小, 运行效率高, 适合移动/PC 端开发
  • 它本身只关注 UI, 也可以引入其它第三方库开发项目

1.3 Vue周边库

  • vue-cli: vue 脚手架
  • vue-resource
  • axios
  • vue-router: 路由
  • vuex: 状态管理
  • element-ui: 基于 vue 的 UI 组件库(PC 端)

二、初始Vue

2.1 插值语法

  • 功能: 用于解析标签体内容
  • 语法: {{xxx}} ,xxxx 会作为 js 表达式解析
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/vue.js"></script>
</head>
<body>
    <!-- 创建一个存放vue数据的容器 -->
    <div id="root">
        <!-- {{xxx}}  可以直接获取vue实例中data里相对应的数据 -->
            {{name}} 
    </div>
    <script>
        // 创建一个vue实例对象
        let x=new Vue({
            //对应的容器id,也可以是类选择器
            el:"#root",
            //存放的数据  
            data:{
                name:"zhangsan",
                url:"www.baidu.com",
            }
        });
    </script>
</body>
</html>

2.2 指令语法

2.2.1 v:bind / 简写 : 指令 单向数据绑定

  • 功能: 解析标签属性、解析标签体内容、绑定事件
  • 举例:v-bind:href = ‘xxxx’ ,xxxx 会作为 js 表达式被解析 xxx为数字时,不会被当做String类型解析
  • 说明:Vue 中有有很多的指令,此处只是用 v-bind 举个例子
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/vue.js"></script>
</head>
<body>
    <!-- 创建一个存放vue数据的容器 -->
    <div id="root">
            <a v-bind:href="url">跳转页面(会获取实例中data里面的url数据)</a>
    </div>
    <script>
        // 创建一个vue实例对象
        let x=new Vue({
            //对应的容器id,也可以是类选择器
            el:"#root",
            //存放的数据  
            data:{
                name:"zhangsan",
                url:"www.baidu.com",
            }
        });
    </script>
</body>
</html>

2.2.2 v-model 双向数据绑定

  • 语法:v-mode:value=“xxx” 或简写为 v-model=“xxx”
  • 特点:数据不仅能从 data 流向页面,还能从页面流向 data
  • 备注:v-model:value可以简写为v-model,因为v-model默认收集的就是value值
  • 注意:v-model只能应用在表单类元素(输入类元素 input,select 等)
	<input type="text" v-model:value="name">

2.3 事件处理

语法:v-on:xxx 或 @xxx 绑定事件,十中xxx是事件名 例: v-on:click 单击事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/vue.js"></script>
</head>
<body>
    <!-- 创建一个存放vue数据的容器 -->
            <!-- 事件绑定的两种方法 -->
            <span id="cli" v-on:click="showInfo">点我</span>
            <span @click="showInfo($event,66)">点我</span>
    </div>

    <script>
        // 创建一个vue实例对象
        let x=new Vue({
            //对应的容器id,也可以是类选择器
            el:"#root",
            //存放的数据  
            data:{
                name:"zhangsan",
                url:"www.baidu.com",
            },
            methods: {
                showInfo(){
                    alert(1);
                },
                showInfo(event,number){
                    console.log(event,number);
                }
            },
        });
        
    </script>
</body>
</html>

2.4 事件修饰符

  • 加在事件处理的后面 以 . 开始 加
	1. prevent:阻止默认事件(常用)
	<a href="www.baidu.com" @click.prevent="showInfo($event,66)">点我阻止默认事件</a>
	2. stop:阻止事件冒泡(常用)
	
	3. once:事件只触发一次(常用)

2.5 键盘事件

  • Vue中常用的按键别名 @keyup.xxx=“方法名”/@keydown.xxx=“方法名” xxx代表下面的按键别名
	1. 回车=> enter
	2. 删除=> delete(捕获“删除”和“退格”键)
	3. 退出=> esc
	4. 空格=> space
	5. 换行=> tab(特殊,必须配合@keydown使用)
	6. 上=> up
	7. 下=> down
	8. 左=> left
	9. 右=>right
  • 使用按键别名
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/vue.js"></script>
</head>
<body>
    <!-- 创建一个存放vue数据的容器 -->
    <div id="root" v-bind:href="url">
            键盘事件:<input type="text" @keyup.enter="keycode">
    </div>

    <script>
        // 创建一个vue实例对象
        let x=new Vue({
            //对应的容器id,也可以是类选择器
            el:"#root",
            //存放的数据  
            data:{
                name:"zhangsan",
                url:"www.baidu.com",
            },
            methods: {
                keycode(e){
                    //打印文本的值
                    console.log(e.target.value);
                }

            },
        });
        
    </script>
</body>
</html>

2.6 计算属性

	计算属性:
		1. 定义:要用的属性不存在,要通过已有属性计算得来
		2. 原理:底层借助了Object.defineproperty方法提供的getter和setter
		3. get函数什么时候执行?
			(1). 初次读取时会执行一次
			(2). 当依赖的数据发生改变时会被再次调用。
		4. 优势:与methods实现相比,内部有缓存机制(复用),效率更高,调试方便。
		5. 备注:
			(1). 计算属性最终会出现在vm上,直接读取使用即可。
			(2). 如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/vue.js"></script>
</head>
<body>
    <div id="root">
        firstName:<input type="text" v-model="firstName"><br>
        lastName:<input type="text" v-model="lastName"><br>
        全名:<span> {{fullName}} </span>
    </div>
    <script>
        new Vue({
            el:"#root",
            data:{
                firstName:"张",
                lastName:"三",
            },
            computed: {
                // 直接当做普通属性调用不加括号
                // 任何data中数据变化立即重新计算
                // 计算属性会缓存
                fullName:{
                    //get有什么用?当有人读取fullName时,get就会被调用,且返回值就作为fullName的值
                    //get什么时候用? 1.初次读取fullName时候。 2.所依赖的数据发生变化时。
                    get(){
                        return this.firstName+"-"+this.lastName;
                    }
                    set(value){
                        console.log(属性被修改);
                        const arr=value.split["-"];
                        this.firstName=arr[0];
                        this.lastName=arr[1];
                    }
                }
            },
        })
    </script>
</body>
</html>
  • 计算属性简写:只考虑展示数据,不考虑修改数据时,可以使用
<body>
    <div id="root">
        firstName:<input type="text" v-model="firstName"><br>
        lastName:<input type="text" v-model="lastName"><br>
        全名:<span> {{fullName}} </span>
    </div>
    <script>
        new Vue({
            el:"#root",
            data:{
                firstName:"张",
                lastName:"三",
            },
            computed: {
                // 直接当做普通属性调用不加括号
                // 任何data中数据变化立即重新计算
                // 计算属性会缓存
                // fullName:{
                //     //get有什么用?当有人读取fullName时,get就会被调用,且返回值就作为fullName的值
                //     //get什么时候用? 1.初次读取fullName时候。 2.所依赖的数据发生变化时。
                //     get(){
                //         return this.firstName+"-"+this.lastName;
                //     },
                //     set(value){
                //         console.log(属性被修改);
                //         const arr=value.split["-"];
                //         this.firstName=arr[0];
                //         this.lastName=arr[1];
                //     }
                // },

                //上面fullName的简写 可以直接写要展示的方法即可
                fullName(){
                    return this.firstName+"-"+this.lastName;
                }
            },
        })
    </script>
</body>  

2.7 监听属性

<script>
        new Vue({
            el: "#root",
            data: {
                firstName: "张",
                lastName: "三",
            },
            watch: {
                //语法
                /** 1.
                 *  要监视的对象:{
                 *      handler(newVal,oldVal){
                 *          
                 *      }
                 *  }
                 *  2.
                 *  要监视的对象:(newVal,oldVal)->{
                 *      业务
                 *  }
                **/
                firstName: (newVal, oldVal) => {
                    console.log(newVal, oldVal);
                },
                lastName: {
                	immediate:true, //初始化时让handler调用一下
                    handler(newVal, oldVal) {
                        console.log(newVal, oldVal);
                    }
                },
                //监测属性 简写
                firstName(newVal, oldVal){
                    console.log(newVal, oldVal);
                }
            },

        })
    </script>

2.8 计算属性与监听属性之间的区别

  • computed和watch的区别
	1. computed能完成的功能,watch都可以完成。
	2. watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作。
  • 两个重要的小原则:
	1. 所被Vue管理的函数,最好写成普通函数,这样this的指向才是 vm 或 组件实例对象
	2. 所有不被Vue管理的函数(定时器回调函数,ajax的回调函数,Promise的回调函数),最好写成箭头函数,这样this的指向才是 vm 或 组件实例对象

2.9 条件渲染

<!-- v-show做条件渲染:true显示标签,false给标签加上display:none隐藏标签 -->
        <a href="#" v-show="true">超链接</a>
        <a href="#" v-show="false">超链接</a>
        <!-- v-if做条件渲染:true显示标签,false给标签删除 -->
        <a href="#" v-if="true">超链接</a>
        <a href="#" v-if="false">超链接</a>

2.10 条件渲染

<body>
    <div id="root">
        <ul>
            <!-- 需要遍历哪个标签,v-for遍历就加在哪个标签身上  -->
            <!-- key放在虚拟DOM中进行diff算法运行时用到,key最好使用数据中的唯一表示,防止出现意想不到的BUG-->
            <!-- 若不写key,默认是采用index索引值当做key-->
            <li v-for="(person,index) in persons" :key="person.id">
                {{person.name}}--{{person.age}}-{{index}}--{{person.id}}
            </li>
        </ul>
    </div>
    <script>
        new Vue({
            el:"#root",
            data:{
                persons:[
                    {id:"001",name:"张三",age:16},
                    {id:"002",name:"李四",age:17},
                    {id:"003",name:"王五",age:18},
                ]
            }
        })
    </script>
</body>

2.11 收集表单数据的细节

<!-- 
			收集表单数据:
					若:<input type="text"/>,则v-model收集的是value值,用户输入的就是value值。
					若:<input type="radio"/>,则v-model收集的是value值,且要给标签配置value值。
					若:<input type="checkbox"/>
							1.没有配置input的value属性,那么收集的就是checked(勾选 or 未勾选,是布尔值)
							2.配置input的value属性:
									(1)v-model的初始值是非数组,那么收集的就是checked(勾选 or 未勾选,是布尔值)
									(2)v-model的初始值是数组,那么收集的的就是value组成的数组
					备注:v-model的三个修饰符:
									lazy:失去焦点再收集数据
									number:输入字符串转为有效的数字
									trim:输入首尾空格过滤
		-->
	<body>
		<!-- 
			收集表单数据:
					若:<input type="text"/>,则v-model收集的是value值,用户输入的就是value值。
					若:<input type="radio"/>,则v-model收集的是value值,且要给标签配置value值。
					若:<input type="checkbox"/>
							1.没有配置input的value属性,那么收集的就是checked(勾选 or 未勾选,是布尔值)
							2.配置input的value属性:
									(1)v-model的初始值是非数组,那么收集的就是checked(勾选 or 未勾选,是布尔值)
									(2)v-model的初始值是数组,那么收集的的就是value组成的数组
					备注:v-model的三个修饰符:
									lazy:失去焦点再收集数据
									number:输入字符串转为有效的数字
									trim:输入首尾空格过滤
		-->
		<!-- 准备好一个容器-->
		<div id="root">
			<form @submit.prevent="demo">
				账号:<input type="text" v-model.trim="userInfo.account"> <br/><br/>
				密码:<input type="password" v-model="userInfo.password"> <br/><br/>
				年龄:<input type="number" v-model.number="userInfo.age"> <br/><br/>
				性别:
				男<input type="radio" name="sex" v-model="userInfo.sex" value="male"><input type="radio" name="sex" v-model="userInfo.sex" value="female"> <br/><br/>
				爱好:
				学习<input typeVue保姆级入门教程

vue电商后台管理系统保姆级教程(一)——项目概述

vue电商后台管理系统保姆级教程——分类参数

vue电商后台管理系统保姆级教程——商品分类

vue电商后台管理系统保姆级教程——角色列表结构功能

vue电商后台管理系统保姆级教程——项目初始化