欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Vue快速入门-个人笔记

程序员文章站 2022-06-06 19:13:49
...

Vue实战

1 Vue入门

下载Vue.js

//开发版本
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

Vue第一个入门应用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue第一个入门案例</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

</head>
<body>
    <div id = "app">
        {{msg}}  {{username}}
        <br>
        <span>
            {{username}}
            <h1>{{msg}}</h1>
        </span>
    </div>

    <script>
        const app = new Vue({
            el:"#app",   //element 用来给Vue定义一个作用范围
            data: {
                msg: "欢迎你!!",
                username:"Hello!",
            },   //用来给Vue实例定义一些相关数据
        });
    </script>
</body>
</html>
# 总结:
1.Vue实例中的el属性,代表Vue作用范围,日后在Vue的范围内都可以使用Vue语法!
2.Vue实例中的data属性,代表给Vue实例绑定一些数据,绑定的数据可以通过{{变量名}}的形式取出来!
3.在使用{{}}进行获取data中数据时,可以在{{}}中书写表达式,运算符,调用响应的方法以及逻辑运算!
4.el属性汇总可以书写任意的css选择器【jquery选择器】,但在Vue开发中推荐使用id选择器!!
data中复杂对象的取值
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue第一个入门案例</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

</head>
<body>
    <div id = "app">
        <h3> {{msg}} </h3>
        <h4> {{user.name}}</h4>
        <h3> {{list[0]}} </h3>
        <h4>{{duixiang_list[0].name}}</h4>
    </div>

    <script>
        const app = new Vue({
            el:"#app",
            data:{
              msg:"hello vue",
              user:{name:"汤米",msg:"欢迎你!"},
              age:23,
              list:["henan","beijing"],
              duixiang_list:[{name:"小黑",age:23},{name:"小红",age:24}]
            },
        });
    </script>
</body>
</html>

1.1 v-text

v-text用来获取data中的数据,把数据以文本形式渲染到指定标签内部,类似于js中的innertext

<div id = "app">
    <span>{{msg}}</span>
    <span v-text="msg"></span>
</div>

<script>
    const app = new Vue({
        el:"#app",   //element 用来给Vue定义一个作用范围
        data: {
            msg: "欢迎你",
            username:"Hello!",
        },   //用来给Vue实例定义一些相关数据
    });
</script>
# 总结:
1.{{}}插值表达式和v-text获取数据的差别在于
	a.使用v-text会把标签中原有的数据覆盖,使用插值表达式的形式不会覆盖标签原有数据
	b.使用v-text可以避免在网络环境较差的时候出现插值闪烁

1.2 v-html

v-html用来获取data中的数据将数据中含有html标签先解析在渲染到指定标签的内部,类似于js中的innerHTML

<div id = "app" class="aa">

    <span>{{alink}}</span>lalala
    <br>
    <span v-html="alink">lalala</span>
</div>

<script>
    const app = new Vue({
        el:"#app",   //element 用来给Vue定义一个作用范围
        data: {
            msg: "欢迎你",
            username:"Hello!",
            alink:"<a href = ''>欢迎来到百度!</a>"
        },   //用来给Vue实例定义一些相关数据
    });
</script>

1.3 v-on事件绑定

  1. 在Vue中绑定事件是通过v-on完成的,v-on:事件名 如v-on:click(change)
  2. v-on:事件名的赋值语句是当前时间触发调用的函数名
  3. 在Vue中事件的函数定义到methods:{}中
  4. 在vue中定义的事件中this值得就是当前的实例,日后可以再事件中通过使用this获取vue实例中相关数据
<body>
    <!--
        点击按钮,年龄+1
        1.页面提供按钮
        2.按钮绑定事件 onclick onmouseover onmove onkeyup
        3.在单击中,更新值
    -->
    <div id = "app">
        <h2 v-text="message"></h2>
        <h2>年龄:{{age}}</h2>
        <br>
        <input type="button" value="点我改变年龄" v-on:click="changeage">
    </div>


<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
       el:"#app",
       data:{
           message:"hello,欢迎来到NGA阴阳师!",
           age:23,
       },
       methods:{
           changeage:function(){
               alert('单击触发')
           }
       }
    });
</script>

Vue事件的简化语法

# v-on:click = "xxxx"
# @click = "xxxx"

<div id = "app">
    <h2>{{age}}</h2>
    <input type = "button" value = "通过v-on修改年龄" v-on:click="changeage">
    <input type = "button" value = "通过@绑定事件修改年龄-1" @click = "editage">
</div>


<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el:"#app",  //用来指定vue作用范围
        data:{
            age:23,
        },
        methods:{
            changeage:function(){
                this.age++;
            },
            editage:function () {
                this.age--;
            }
        }
    });
</script>

Vue事件的两种写法

<div id ="app">
        <span>{{count}}</span>
        <input type = "button" value = "改变count的值" @click="changecount">
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        const app = new Vue({
           el:"#app",
           data:{
                count:1,
           },
           methods:{
               // changecount:function(){
               //     this.count++;
               // }
               changecount(){
                   this.count++;
               }
           },
        });
    </script>
# 总结:
 1. 在Vue中事件定义存在两种写法 
 一种是 函数名:function(){}
 一种是 函数名(){}

Vue中事件参数传递

<div id = "app">
    <span>{{count}}</span>
    <input type="button" value="改变count为指定的值" @click="changecount(23,'xiaoc')">
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el:"#app",
        data:{
            count:1,
        },
        methods:{
            changecount(count,name){
                this.count = count;
                alert(name);
            }
        }
    })
</script>
# 总结:
	1.在使用事件时,可以直接在事件调用给出事件进行参数传递,在事件定义出通过定义对应变量接收传递的参数。

复习案例1 v-text v-html以及事件绑定

<div id = "app">
    <!--
        v-show:用来控制标签是显示还是隐藏
    -->
    <!--插值表达式-->
    <span>{{msg}}</span><br>
    <span>{{age}}</span><br>
    <span>{{arr[0]}}</span><br>
    <span>{{user}}</span><br>

    <!--v-text相当于js innerText,指令里面不需要写插值表达式了-->
    <span v-text="msg"></span>

    <!--v-html相当于js innerHtml,指令里面不需要写插值表达式了-->
    <span v-text="message"></span>
    <span v-html="message"></span>
    <br>
    <!--
        事件的三要素 1.事件源 html标签是谁 2.事件:特定动作 单击/双击等等 3.事件处理程序:使用函数完成

        Vue中事件的定义
            1. v-on 指令  用来给标签绑定时间
            2. 事件参数传递
    -->
    <input type = "button" value="点我触发事件" @click="click"><br>
    <input type = "button" value="点击获取事件参数" @click="getnum('20')">

</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el:"#app",
        data:{
            message:"<a herf='#'>阴阳师官网</a>",
            msg:"欢迎来到阴阳师",
            age:23,
            arr:["北京校区","天津校区","恒安校区"],
            user:{name:"橘瑠衣",age:23,content:"很擅长料理!"}
        },
        methods:{
            click(){
                alert("按钮已经点击!");
            },
            getnum(count){
                alert(count);
                console.log(count);
                console.log(this.msg); //拿到Vue实例中的值
            },
        }
    })
</script>

1.4 v-show v-if v-bind

<div id = "app">
    <!--
        1.v-show 用来控制页面中的标签元素是否显示,底层通过控制元素的display属性是true还是false
    -->
    <h1 v-show="true">欢迎来到阴阳师!</h1>
    <h1 v-show="isShow">欢迎来到阴阳师!</h1> <!--绑定data中的值-->

    <input type = "button" value="点我有惊喜!" @click="showhide">
    <br>
    <!--
        2.v-if 用来控制页面中的标签元素是否显示,底层通过对dom树节点进行添加和删除来控制显示和隐藏
    -->
    <h1 v-if="true">永生之海风云再起</h1>

    <br>
    <!--
        3.v-bind 用来给页面中的标签元素绑定相应的属性
    -->
    <img  width="300px" v-bind:title="title"
          v-bind:src="src">
    <br>
    <input type = "button" value="改变图片的title" @click="changeTitle('铃鹿山之主')">
    <br>
    <input type = "button" value="点击更换图片" @click="changeSrc('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1605973740480&di=f0fea30e1e487019d19302b4f1a9b4e5&imgtype=0&src=http%3A%2F%2Fimg.nga.178.com%2Fattachments%2Fmon_202005%2F12%2FeyQ5-emecZ26T3cSp0-xc.jpg')">
    <!--v-bind:属性=""    ======> 简易写法 :属性=""   -->
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el:"#app",
        data:{
            isShow:true,
            title:"铃鹿御前",
            src:"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1605973176004&di=a133827cedbe52a3c02e0551ae071a75&imgtype=0&src=http%3A%2F%2Fpic.veryhuo.com%2Fupload%2Farticle%2F20200519%2F243aea99c45690c39e8c78d92fd96667.jpg",

        },
        methods:{
            showhide(){
                this.isShow=!this.isShow;
            },
            changeTitle(title) {
                this.title = title;
            },
            changeSrc(src){
                this.src = src;
            }
        }
    })
</script>

1.5 v-for

v-for:作用就是用来对数据或者对象进行遍历的(数组就是对象的一种)

<div id="app">
    <span>{{user.name}} {{user.age}}</span>
    <!--
        通过v-for进行遍历对象
    -->
    <br>
    <!-- u代表整个对象
    <span v-for="u in user">
        {{u}}
    </span>
    -->
    <span v-for="(value,key,index) in user">{{value}}:{{key}}:{{index}}</span>

    <!--
     通过v-for进行遍历数组
    -->
    <ul>
        <li v-for="a,index in arr">
            {{index}} {{a}}
        </li>
    </ul>

    <!--
        通过v-for遍历数组中的对象
        v-bind:key 便于vue内部做重用排序
    -->
    <ul>
        <li v-for="user,index in users" v-bind:key="user.id">
            {{user.index}} === {{user.name}} === {{user.age}} === {{user.content}}
        </li>
    </ul>

</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el: "#app",   //element 用来给Vue定义一个作用范围
        data: {
            user:{name:"小陈",age:23},
            arr:["北京校区", "天津校区", "河南校区"],
            users:[
                {id:1,name:"xiaochen",age:23,content:"我曾经也是一个单纯的少年。"},
                {id:2,name:"xiaoliu",age:27,content:"好想快点买房!"},
            ]
        },   //用来给Vue实例定义一些相关数据
        methods: {}
    });
</script>
# 总结
在使用v-for的时候一定要加入:key方便vue做重用排序的唯一key

1.6 v-model双向绑定

v-model:作用用来绑定标签元素的值与vue实例对象中data数据保持一致,从而实现双向的数据绑定

什么叫做双向绑定

文本框中数据发生变化,data中的值也发生变化。

data中的值发生变化,文本框中的数据也发生变化。

<div id="app">
    <!--v-model把文本框中的数据绑定到Vue实例中-->
    <input type = "text" v-model="message">
    <br>
    <span>{{message}}</span>
    <br>
    <input type="button" value="改变Data中的值" @click="changeValue">
</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el: "#app",   //element 用来给Vue定义一个作用范围
        data: {
            message:""
        },   //用来给Vue实例定义一些相关数据
        methods: {
            changeValue(){
                this.message = "xxxxx";
            }
        }
    });
</script>
# 总结:
1. v-model使用可以实现数据的双向绑定
2. 所谓双向绑定 表单中的数据导致vue实例data数据变化 vue实例中data数据的变化导致表单中数据变化

# MVVM架构
Model:数据 VUE实例中绑定数据
VM:ViewModel 监听器
View:页面

记事本案例

<div id = "app">
    <input type="text" v-model="msg"> <input type="button" value="添加到记事本" @click="save">
    <br>
    <ul>
        <li v-for="item,index in lists">
            {{index+1}} {{item}} <a href="javascript:;" @click="delRow(index)">删除</a>
        </li>
    </ul>

    <br>
    <span>总数量:{{lists.length}}</span><input type="button" value="删除所有" v-show="lists.length!=0" @click="delAll">
</div>
<!--
    1.完成记事本查询所有思路:1)将所有数据绑定为Vue实例 2)遍历Vue实例中数据到页面
    2.添加 1) 添加按钮去绑定事件 2)在事件中获取输入框中数据 3)将获取到的数据放入到list里面
    3.删除
    4.删除所有    总数量
-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el:"#app",   //element 用来给Vue定义一个作用范围
        data: {
            lists:["阴阳师神乐新皮肤上线","sp山风降临平安京"],
            msg:"",
        },   //用来给Vue实例定义一些相关数据
        methods:{
            save(){//添加到记事本
                console.log(this.msg);
                this.lists.push(this.msg); //文本框中的数据push到list里面
                this.msg = ''; //清空文本框中的数据
            },
            delRow(index){//删除一条记录
                //根据下标删除数组中的某个元素
                this.lists.splice(index,1); //参数1代表删除的下标从哪个下标开始删除  参数2代表删除几个元素
            },
            delAll(){ //删除所有数据
                this.lists = [];
            }
        }
    });
</script>

1.7 事件修饰符

修饰符:用来和事件连用,用来决定事件触发条件或者是阻止事件的触发机制
# 常用的事件修饰符
.stop
.prevent
.capture
.self
.once
.passive

stop事件修饰符

用来阻止事件冒泡

<div id="app">
 <div class = "aa" @click="divClick">

     <input type = "button" value="按钮" @click.stop="btnClick">
</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el: "#app",   //element 用来给Vue定义一个作用范围
        data: {},   //用来给Vue实例定义一些相关数据
        methods: {
            btnClick(){
                alert("按钮被点击了")
            },
            divClick(){
                alert("div被点击了")
            }
        }
    });
</script>

prevent事件修饰符

用来阻止标签的默认行为

 <a href = "https://www.baidu.com" @click.prevent="aClick">百度</a>

1.8 按键修饰符

作用:用来与键盘按键事件绑定在一起,用来修饰特定的按键事件的修饰符。

# 按键修饰符
.enter
.tab
.delete
.esc
.space
.up
.down
.left
.right

enter回车

用来触发回车按键之后触发的事件

<div id="app">
    <!--enter按键修饰符,在回车之后触发事件-->
    <input type="text" v-model="msg" @keyup.enter = "keyups">
    <br>
    <input type="text" @keyup.delete="keytabs">
</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el: "#app",   //element 用来给Vue定义一个作用范围
        data: {
            msg:"",
        },   //用来给Vue实例定义一些相关数据
        methods: {
            keyups(){
                alert("键盘抬起");
                alert(this.msg);
            },
            keytabs(){
                alert("删除!");
            }
        }
    });
</script>

2 Axios 异步使用

Axios是一个异步请求技术,核心作用是用来在页面中发异步请求,并获取对应数据在页面中的渲染,跟Ajax相似

2.1 Axios第一个程序

Axios官方网站

安装:

2.1.1 GET方式的请求

<div id="app">

</div>


<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>

    //发送GET方式请求
    axios.get("http://localhost:8080/user/findAll").then(function(response){
        console.log(response.data)
    }).catch(function(err){
        console.log(err);
    });
    const app = new Vue({
        el: "#app",   //element 用来给Vue定义一个作用范围
        data: {},   //用来给Vue实例定义一些相关数据
        methods: {}
    });
</script>


///输入参数

//发送GET方式请求
    axios.get("http://localhost:8080/user/findAll?name=xiaochen").then(function(response){
        console.log(response.data)
    }).catch(function(err){
        console.log(err);
    });

2.1.2 POST方式的请求

<script>

    axios.post("http://localhost:8080/user/save",{
        username:"xiaochen",
        age:23,
        email:"[email protected]",
        phone:15363150846
    }).then(function(response){
        console.log(response.data);
    }).catch(function(err){
        console.log(err);
    })

    const app = new Vue({
        el: "#app",   //element 用来给Vue定义一个作用范围
        data: {},   //用来给Vue实例定义一些相关数据
        methods: {}
    });
</script>

2.1.3 Axios并发请求

并发请求:将多个请求在同一时刻发送到后端服务接口,最后再集中处理每个请求的响应结果

<script>

    //并发请求
    //1.创建一个查询所有的请求
    function findAll(){
        return axios.get("http://localhost:8080/user/findAll?name=xiaochen");
    }
    //2.创建一个保存的请求
    function save(){
        return axios.post("http://localhost:8080/user/save",{
            username:"xiaochen",
            age:23,
            email:"[email protected]",
            phone:15363150846
        });
    }

    //3.并发执行
    axios.all([findAll(),save()]).then(
        axios.spread(function(res1,res2){  //用来将一组函数的响应结果汇总处理
            console.log(res1.data);
            console.log(res2.data);
        })
    ); //用来发送一组请求

    const app = new Vue({
        el: "#app",   //element 用来给Vue定义一个作用范围
        data: {},   //用来给Vue实例定义一些相关数据
        methods: {}
    });
</script>

2.1.4 VUE结合Axios实现天气查询

<div id="app">
    <input type="text" v-model="name" @keyup.delete="shows" @keyup.enter="searchCity"/>
    <input type="button" value="搜索"  @click="searchCity"/><br>
    <span  v-for="city in hotCitys">
        <a href="" @click.prevent="searchCitys(city)">
            {{city}}
        </a>&nbsp;&nbsp;
    </span>
    <hr>
    <span v-show="isShow">{{name}},今天的天气是:{{message}}</span>

</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
    const app = new Vue({
        el: "#app",   //element 用来给Vue定义一个作用范围
        data: {
            name:"",
            hotCitys:["北京","上海","深圳","广州","天津"],
            message:"",
            isShow:false,
        },   //用来给Vue实例定义一些相关数据
        methods: {
            searchCity(){
                //获取输入的城市信息
                console.log(this.name);
                let _this = this;  //把外部的this赋值给内部的this
                //发送axios请求
                axios.get("http://localhost:8080/city/find?name="+this.name).then(function(response){
                    console.log(response.data.message);
                    _this.message=response.data.message;
                    _this.isShow=true;
                }).catch(function(err){
                    console.log(err);
                });
            },
            searchCitys(name){
                this.name = name;
                this.searchCity();
            },
            shows(){
                this.isShow = false;
            }
        }
    });
</script>

VUE CLI使用

CLI --> 命令行

Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统。使用脚手架之后我们开发的将是一个完整的系统(项目)

VUE 优势

  • 通过vue-cli交互式项目脚手架,boostrap,css,js,jquery等通过命令行直接安装依赖

安装nodejs

创建vue脚手架第一个项目