Vue笔记01

Vue

1. Vue基础

1.1 第一个Vue程序

  • 引入
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!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>Vue基础</title>
    
</head>
<body>
    <div id="app">
    {{message}}
    </div>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            el:"#app",
            data:{
                message:"hello Vue"            }
        })
    </script>
</body>
</html>

1.2 el挂载点

  • 作用范围
<!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>Vue基础</title>
    
</head>
<body>
    {{message}}
    <div id="app">
    {{message}}
    <p>
        {{message}}
    </p>
    </div>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            el:"#app",
            data:{
                message:"hello Vue"            }
        })
    </script>
</body>
</html>

image-20210215175512829

作用于:el命中的元素内部,以及内部的后代元素

  • 可以使用其他选择器,但建议使用id选择器
<!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>Vue基础</title>
    
</head>
<body>
    {{message}}
    <div id="app" class="app">
    {{message}}
    <p>
        {{message}}
    </p>
    </div>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            // el:"#app",
             el:".app",
            data:{
                message:"hello Vue"            }
        })
    </script>
</body>
</html>
  • 可以使用其他的双标签,但不能使用HTML和BODY

1.3data数据对象

<!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>Vue基础</title>
    
</head>
<body>
    <div id="app" >
    {{message}}
   <h2>{{school.name}}</h2> 
        <ul>
            <li>campus[0]</li>
            <li>campus[1]</li>
            <li>campus[2]</li>
            
        </ul>
    </div>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            el:"#app",
         
            data:{
                message:"hello Vue",  
                school:{
                    name:"王一博",
                    tel:"212313131"
                    },
                campus:["北京校区","上海","广州"]
                 
                }
               
        })
    </script>
</body>
</html>

image-20210215200803084

2.本地应用

2.1 v-text

<!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>v-text指令</title>
</head>
<body>
    <div id="app">
        <h2 v-text="message+'!'">上海</h2>
        <h2 v-text="info+'!'">上海</h2>
        <h2>{{message+'!'}}深圳</h2>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            el:"#app",
            data:{
                message:"我看着你的脸轻刷着和弦",
                info:"或许去看看沙滩"
            }

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

image-20210215204809918

  • 默认写法会替换全部内容,使用**差值表达式{{}}**可以替换指定内容

2.2 v-html

<!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>vue</title>
</head>
<body>
    <div id="app">   
        <p v-html="context"></p>   
        <p v-text="context"></p>  
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            el:"#app",
            data:{
                context:"<a href='http://www.baidu.com'>百度</a>"
            }

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

image-20210215205606413

2.3 v-on

  • 为元素绑定事件
<!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>vue</title>
</head>
<body>
    <div id="app">   
      <input type="button" value="v-on指令" v-on:click="dofun">
      <input type="button" value="v-on简写" @click="dofun">
      <input type="button" value="v-on指令" @dblclick="dofun">
      <h2 @click="changeFood">{{food}}</h2>
    </div>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            el:"#app",
            data:{
                food:"土豆"
            },
            methods:{  
                dofun:function(){
                    alert("周杰伦");
                },
                changeFood:function(){
                    this.food+="鸡蛋"
                }               
            },

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

image-20210215212554922

注意:方法名不能用do

2.4 计数器

<!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>计数器</title>
</head>
<body>
    <div id="app">
        <!-- 计数器功能区域 -->
        <div class="input-num">
            <button @click="sub">
                -
            </button>
            <span>{{num}}</span>
            <button @click="add">
                +
            </button>
        </div>

    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            el:"#app",
            data:{
                num:1
            },
            methods:{
                add:function(){
                    if(this.num<10){
                        this.num++;
                    }else{
                        alert("别点了,最大了");
                    }
                   
                },
                sub:function(){
                    if(this.num>0){
                        this.num--;
                    }else{
                        alert("别点了,最小了");
                    }
                   
                }
            }

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

2.5 v-show

  • 根据表达式值的真假,切换元素的显示和隐藏

    <!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>
    </head>
    <body>
        
        <div id="app">
            <input type="button" value="累加年龄" @click="addAge">
            <input type="button" value="切换显示状态" @click="changeIsShow">
            <img v-show="isShow" src="img/1.png" alt="">
            <img v-show="age>=18" src="img/1.png" alt="">
        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            var app=new Vue({
                el:"#app",
                data:{
                    isShow:false,
                    age:17
                },
                methods:{
                    changeIsShow:function(){
                        this.isShow=!this.isShow;
                    },
                    addAge:function(){
                        this.age++;
                    }
                }
            })
        </script>
    </body>
    </html>
    

2.6 v-if

<!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>
</head>
<body>
    
    <div id="app">
        <input type="button" value="切换显示" @click="toggleIsShow">
        <p v-if="isShow">颓废</p>
        <p v-show="isShow">颓废  v-show修饰</p>
        <h2 v-if="temperture>=35">热死了</h2>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            el:"#app",
           data:{
               isShow:false,
               temperture:20 
           },
           methods:{
               toggleIsShow:function(){
                   this.isShow=!this.isShow;
               }
           }
        })
    </script>
</body>
</html>

2.7 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>
    <style>
        .active{
            border:1px solid red;
        }
    </style>
</head>
<body>
    
    <div id="app">
        <img v-bind:src="imgSrc" alt="">
        <br>
        <img :src="imgSrc" alt="" :title="imgTitle+'!!!!'" :class="isActive?'active':''" @click="toggleActive">
        <br>
        <img :src="imgSrc" alt="" :title="imgTitle+'!!!!'" :class="{active:isActive}" @click="toggleActive">
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            el:"#app",
            data:{
                imgSrc:"img/2.png",
                imgTitle:"歌曲",
                isActive:false           
             },
             methods:{
                 toggleActive:function(){
                     this.isActive=!this.isActive;
                 }
             }
            
        })
    </script>
</body>
</html>

2.8 图片切换

<!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>轮播图</title>
</head>
<body>
    <div id="mask">
        <!-- 图片 -->
       <img src="imgArr[index]" alt=""/>
       <!-- 左箭头 -->
       <!-- <a href="javascript:void(0)" class="left" @click="prev" v-show="index!=0">
           <img src="/img/left.png" alt="" > 
       </a> -->
       <a href="javascript:void(0)" class="left" @click="prev" v-if="index!=0">
        <img src="/img/left.png" alt="" > 
    </a>
       <!-- 右箭头 -->
       <a href="javascript:void(0)" class="right" @click="next" v-show="index<imgArr.length-1">
            <img src="/img/right.png" alt="">
       </a>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    
    <script>
        var app=new Vue({
            el:"#mask",
            data:{
                imgArr:[
               " \img\1.png",
               "\img\2.jpg",
               "\img\3.jpg",
               "\img\4.jpg",
               "\img\5.jpg",
               "\img\left.png",
               "\img\right.png"
                ],
            methods:{
                prev:function(){
                    this.index--;
                },
                next:function(){
                    this.index++;
                }
            }
            }
        })
    </script>
</body>
</html>

2.9 v-for

<!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>
</head>
<body>
    <div id="app">
        <input type="button" value="添加数据" @click="add">
        <input type="button" value="移除数据" @click="remove">
        <ul>
            <li v-for="item in arr">
                告五人:{{item}}
            </li>
            <li v-for="(item,index) in arr">
                {{index+1}}告五人:{{item}}
            </li>
        </ul>
        <h2 v-for="item in vegetables" v-bind:title="item.name">
                {{item.name}}
        </h2>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            el:"#app",
            data:{
                arr:["丑人多作怪","爱人错过","带我去找夜生活","披星戴月的想你"],
                vegetables:[
                    {name:"土豆"},
                    {name:"鸡蛋"}
                ]
            },
            methods:{
                add:function(){
                    this.vegetables.push({name:"花菜炒蛋"});
                },
                remove:function(){
                    this.vegetables.shift();
                }
            }
        })
    </script>
</body>
</html>

2.10 v-model

  • 获取和设置表单元素的值(双向数据绑定)
<!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>
</head>
<body>
    <div id="app">
        <input type="button" value="修改meassage" @click="setM">
        <input type="text" v-model="message" @keyup.enter="getM">
        <h2>{{message}}</h2>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            el:"#app",
            data:{
                message:"薛之谦"
            },
            methods:{
                getM:function(){
                    alert(this.message);
                },
                setM:function(){
                    this.message="疯人院"
                }
            }
        })
    </script>
</body>
</html>

2.11 记事本

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>记事本的综合案例</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
    <input type="text" v-model="addTXT"> <input type="button" value="添加到记事本" @click="addReadTXT">
    <br>
    <ul style="list-style-type: none">
        <li v-for="s,index in readTXTs">{{index+1}},{{s}}
            <a href="javascript:;" @click="delReadTXT(index)">删除当前记录</a>
        </li>
    </ul>
    <br>
    <span>总数量:{{readTXTs.length}}条</span><input type="button" value="删除所有" @click="delAll" v-if="readTXTs.length!=0">

</div>

</body>
<script>
    const app = new Vue({
        el: "#app",
        data: {
            addTXT: "",
            readTXTs: ["第一次记事", "第二次记事"],
        },
        methods: {
            addReadTXT() {/*添加到记事本方法*/
                if (this.addTXT != "") {
                    console.log(this.addTXT);
                    this.readTXTs.push(this.addTXT);
                    this.addTXT = "";
                } else alert("请输入内容");
            },
            delReadTXT(index) {/*删除记录*/
                this.readTXTs.splice(index, 1);/*参数1:从哪个下标开始删除;参数2:删除几个元素*/
            },
            delAll() {/*删除所有*/
                if (this.readTXTs.length > 0)
                    this.readTXTs = [];
                else alert("已经删除完毕");

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

3. 网络应用

3.1 axios

  • 功能强大的网络请求库
<!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>
</head>
<body>
    <input type="button" value="get请求" class="get">
    <input type="button" value="post请求" class="post">
    <!-- 导入axios的官方文件 -->
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
        document.querySelector(".get").onclick=function(){
            axios.get("https://autumnfish.cn/api/joke/list?num=6")
            .then(function(response)
            {
                console.log(response);
            },function(err){
                console.log(err);
            })
        }


        document.querySelector(".post").onclick=function(){
            axios.get("https://autumnfish.cn/api/user/reg",{username:"王一博"})
            .then(function(response)
            {
                console.log(response);
            },function(err){
                console.log(err);
            })
        }
    </script>
</body>
</html>
  • axios必须先导入才可以使用
  • 使用get或post方法即可发送对应的请求
  • then方法中的回调函数会在请求成功或者失败时发送
  • 通过回调函数的形参可以获取相应内容,或者错误信息

3.2 axios与vue结合使用

<!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>
</head>
<body>
    <div id="app">
        <input type="button" value="获取笑话" @click="getJoke">
        <p>{{joke}}</p>
    </div>
    <!-- 导入axios的官方文件 -->
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
     var app=new Vue({
            el:"#app",
            data:{
                joke:"很好笑的笑话"
            },
            methods:{
                getJoke:function(){
                    // console.log(this.joke);
                    var that=this;
                    axios.get("https://autumnfish.cn/api/joke").then
                    (function(response){
                        // console.log(response)
                        console.log(response.data);
                        // console.log(this.joke);
                        that.joke=response.data;
                    },function(err){})
                }
            }
     })
    </script>
</body>
</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值