vue语法基础入门附项目代码

本文介绍了Vue.js的基础语法,包括el挂载点的选择器,Date数据对象的使用,以及Vue指令如v-text、v-html、v-on、v-if、v-bind、v-for和v-model的详细解释。同时,讲解了如何使用axios进行网络请求,并提醒读者在axios中需要注意的this指向问题。
摘要由CSDN通过智能技术生成

el挂载点

el:"挂载对象"

ID选择器

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>标签选择器</title>
    </head>
    <body>
        <div id="app">
            {{ message }}
        </div>
        <!引入开发环境版本>
        <script src="https://cdn.jsdelivr.net/npm/vue.js"></script>
        <script>
            <!--一个新的vue实例-->
            var app = new Vue({
                el:"app",
                data:{
                    message:"Hello Vue"
                }
            })
        </script>
    </body>
</html>

Vue对匹配标签里的元素进行渲染,渲染可继承

对象选择器

class="app"

el:".app",

标签选择器

el:"div",

不可以挂载到body与html

Vue会管理el选项命中的元素及其内部的后代元素

el用来设置Vue实例挂载的元素

Date数据对象

<div id="app">
    {{ message }}
    <h2> {{ school.name }} {{ school.mobile }}</h2>
    <ul>
        <li>{{ campus[0] }}</li>
		<li>{{ campus[1] }}</li>
    </ul>
            
</div>

<script>
    var app = new Vue({
        el:"#app",
        data:{
            message:"hello"
            school:{
            name:"a"
            mobile:"b"
        	},
        campus:["","",""]
        }
    })
    
<!DOCTYPE hmtl>
<html>
    <head>
        <meta charset="utf-8">
        <title>数据</title>
    </head>
    <body>
        <div id="app" class="app">
            {{ message + " vue"}}
            <h2>{{ school.name }} {{ school.mobile }}</h2>
            <h2>{{ school }}</h2>
            <ul>
                <li>{{ array[0] }}</li>
                <li>{{ array[1] }}</li>
            </ul>
            <h2>{{ array }}</h2>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            var app = new Vue({
                //el:".app",
                el:"#app",
                //el:"div",
                data:{
                    message:"hello",
                    school:{
                        name:"对象",
                        mobile:"123456"
                    },
                    array:["s","c","h","o"]

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

Vue 指令

v-text

设置标签的文本值

<div id="app">
    <h2 v-text="message"></h2>//完全覆盖
    <h2>深圳{{ message + "!"}}</h2>//差值表达式
</div>

var app=new Vue({
	el:"#app",
	data:{
	message:"hello Vue"
	}
})
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>命令</title>
    </head>
    <body>
        <div id="app">
            <h2 v-text="message">这里将被覆盖</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:"覆盖内容"
                }
            })
        </script>
    </body>
</html>

v-html

设置标签的innerHTML

如果是文本,与v-text没有区别,但如果是HTML,会被解析成语句

<div id="app">
    <p v-html="content"></p>
</div>


var app = new Vue({
	el:"#app"
	date:{
content:"<a href='#'>gotyou</a>"
}
})
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>v-html</title>
    </head>
    <body>
        <div id="app">
            <h2 v-html="message">hi</h2>
            <h2 v-html="message2">hi</h2>
        </div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            el:"#app",
            data:{
                message:"hello",
                message2:"<a href='www.baidu.com'>hello</a>"
            }
        })
    </script>
    </body>
</html>

v-on基础

为元素绑定事件

<div id="app">
    <input type="button" value="事件绑定" v-on:事件名="方法">l
    事件名
    点击:click
    移入:monseenter
    双击:dblclick
    v-on可以换为@
</div>

var app = new Vue({
	el:"#app"
	方法写在这
	methods:{
	//逻辑
	方法:function(){}
}
})

计数器

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>计数器</title>
    </head>
    <body>
        <div id="app">
            <button @click="sub">
                -
            </button>
            <span>{{ num }}</span>
            <button @click="add">
                +
            </button>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            var app = new Vue({
                el:"#app",
                data:{
                    num:0
                },
                methods:{
                    add:function(){
                        if(this.num<10){
                            this.num++;
                        }else{
                            alert("差不多得了");
                        }
                    },
                    sub:function(){
                        if(this.num>0){
                            this.num--;
                        }
                        else{
                            alert("有完没完");
                        }
                    }
                }
            })
        </script>
    </body>
</html>

v-show

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

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>v-show</title>
    </head>
    <body>
        <div id="app">
            <img src="./测试.png" alt="图片加载失败" v-show="true">
            <img src="./测试.png" alt="图片加载失败" v-show="age>=18">
            <button @click="changeFun">
                点我
            </button>
            <img src="./测试.png" alt="图片加载失败" v-show="isShow">
        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            var app = new Vue({
                el:"#app",
                data:{
                    isShow:false,
                    age:16
                },
                methods:{
                    changeFun:function(){
                        this.isShow = !this.isShow;
                    }
                }
            })
        </script>
    </body>
</html>

v-if

根据表达值得真假切换显示状态,操纵DOM元素而不是样式,也就是这个东西直接没了,而不是被隐藏了

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>v-show</title>
    </head>
    <body>
        <div id="app">
            <p v-if="true">我是一个没有感情的标签</p>
            <p @click="changefun" v-if="isshow">我也是一个没有感情的标签</p>
            <p v-if="tem>5">我是一个没有感情的标签</p>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            var app = new Vue({
                el:"#app",
                data:{
                    isshow:true,
                    tem:0
                },
                methods:{
                    changefun:function(){
                        this.isshow=!this.isshow;
                        this.tem=10
                    }
                }
            })
        </script>
    </body>
</html>

v-bind

设置元素的属性

v-bind:属性名=表达式

鼠标悬停属性:title

<!--v-bind:属性名=表达式-->
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>v-show</title>
        <style>
            .active{
                border: 1px solid red;
            }
        </style>
    </head>
    <body>
        <div id="app">
            <img v-bind:src="imgSrc">
            <br>
            <img :src="imgSrc" alt="" :title="imgTitle+'!'" :class="isActive?'active':''" @click=toggleActive>
            <!--img v-bind:title="imgTitle"-->
            <!--img v-bind:class="isActive?'active':“”"-->
            <!--img v-bind:class="{active:isActive}"-->
        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            var app = new Vue({
                el:"#app",
                data:{
                    imgSrc:"./测试.png",
                    imgTitle:"测试图片",
                    isActive:false
                },
                methods:{
                    toggleActive:function(){
                        this.isActive=!this.isActive
                    }
                }
            })
        </script>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>v-show</title>
    </head>
    <body>
        <div id="mask">
            <div class="center">
                <h2 class="title">
                    hello!
                    <!--img src="./测试.png"-->
                </h2>
                <img :src="imgArr[index]" alt="加载失败">
                <!--a href="javascript:void(0)" v-show="index!=0" @click="prev" class="left">
                    <img src="./头.png" alt="">
                </a>
                <a href="javascript:void(0)" v-show="index<imgArr.length-1" @click="next" class="right">
                    <img src="./头.png" alt="">
                </a-->
                <button v-show="index<imgArr.length-1" @click="next">
                    后一张
                </button>
                <button v-show="index!=0" @click="prev">
                    前一张
                </button>
            </div>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            var app = new Vue({
                el:"#mask",
                data:{
                    imgArr:[
                        "./测试.png",
                        "./测试2.png",
                        "./测试3.png",
                        "./测试4.png",
                        "./测试5.png"
                    ],
                    index:0
                },
                methods:{
                    prev:function(){
                        this.index--;
                    },
                    next:function(){
                        this.index++;
                    }
                }
            })
        </script>
    </body>
</html>

v-for

根据数据生成列表结构(响应式)

<div id="app">
    <ul>
        <li v-for="item in arr">内容</li>
        <li v-for="(item,index) in arr" :title="item">{{ index }}{{ item }}</li>
        <li v-for="(item,index) in objArr">{{ item.name }}</li>
    </ul>
</div>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>v-show</title>
    </head>
    <body>
        <div id="app">
            <ul>
                <!--li v-for="item in arr">内容</li-->
                <!--li v-for="(item,index) in arr" :title="item">{{ item }}</li-->
                <li v-for="item in arr">测试:{{ item }}</li>
            </ul>
            <br>
            <ul>
                <li v-for="(item,index) in arr">{{ index }} {{ item }}</li>
            </ul>
            <br>
            <ul>
                <li v-for="(item,index) in fruit" :title="item.name" @click="remove">{{ item }}</li>
            </ul>
            <br>
            <ul>
                <li v-for="(item,index) in fruit" @click="add">{{item.name}}</li>
            </ul>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            var app = new Vue({
                el:"#app",
                data:{
                    //arr:[["北京","上海"],["广州","深圳"],["中山"]]
                    arr:["北京","上海","广州","深圳","中山"],
                    fruit:[
                        {name:"apple"},
                        {name:"banana"},
                        {name:"orange"}
                    ]
                },
                methods:{
                    add:function(){
                        this.fruit.push({name:"strawberry"});
                    },
                    remove:function(){
                        this.fruit.shift();
                    }
                }
            })
        </script>
    </body>
</html>

v-on补充

传递自定义参数与事件修饰符

<div id="app">
    <input type="button" @click="doit(p1,p2)"
    <input type="text" @keyup.enter="sayHi">
</div>
    
var app=new Vue({
    el:"#app",
    methods:{
    doit:function(p1,p2){},
    sayHi:function(){}
    }
})

v-model

获取和设置表单元素的值(双向数据绑定),同步更新

<!DOCTYPE hmtl>
<html>
    <head>
        <meta charset="utf-8">
        <title>记事本</title>
    </head>
    <body>
        <!--主题区域-->
        <section id="todoapp">
            <!--输入框-->
            <header class="header">
                <h1>记事本</h1>
                <input v-model="inputValue" @keyup.enter="add" autofocus="autofocus" autocomplete="off" placeholder="请输入任务" class="new-todo">
            </header>
            <!--列表区域-->
            <section class="main">
                <ul class="todo-list">
                    <li class="todo" v-for="(item,index) in list">
                        <div class="view">
                            <span class="index">{{ index+1 }}.</span>
                            <label>{{ item }}</label>
                            <button class="destroy" @click="remove(index)">x</button>
                        </div>
                    </li>
                </ul>
            </section>
            <!--统计与清空-->
            <footer class="footer">
                <span class="todo-count" v-if="list.length!=0"><strong>{{ list.length }}</strong> items left  </span>
                <button v-show="list.length!=0" class="clear-completed" @click="clear">
                    clear
                </button>
            </footer>
        </section>
        <!--底部-->
        <footer class="info">

        </footer>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            var app=new Vue({
                el:"#todoapp",
                data:{
                    list:["写代码","吃饭","睡觉","打游戏"],
                    inputValue:"好好学习天天向上"
                },
                methods:{
                    add:function(){
                        this.list.push(this.inputValue);
                    },
                    remove:function(index){
                        this.list.splice(index,1);
                    },
                    clear:function(){
                        this.list=[];
                    }
                }
            })
        </script>
    </body>
</html>

axios

网络请求库

axios.get(地址?key=value&key2=value2).then(function(response){},function(err){})

axios.post(地址,key=value&key2=value2).then(function(response){},function(err){})

  • axios必须先导入再使用
  • 使用get或post方法即可发送对应的请求
  • then方法中的回调函数会在请求成功或失败时触发
  • 通过回调函数的形参可以获取响应内容或者错误信息
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>命令</title>
    </head>
    <body>
        <input type="button" value="get请求" class="get">
        <input type="button" value="post请求" class="post">
        <!--script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script-->
        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
        <script>
            document.querySelector(".get").onclick = function() {
                axios.get("https://autumnfish.cn/api/joke/list123455?num=6")
                .then(function (response) {
                    console.log(response);
                },function (err){
                    console.log(err);
                })
            }
            document.querySelector(".post").onclick = function() {
                axios.post("https://autumnfish.cn/api/user/reg",{username:"克"})
                .then(function (response){
                    console.log(response);
                },function (err){
                    console.log(err);
                })
            }
        </script>
    </body>
</html>

注意再axios内部,this已经改变

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>命令</title>
    </head>
    <body>
        <div id="app">
            <input type="button" value="获取笑话" @click="getJoke">
            <p>{{ joke }}</p>
        </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>
            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.data);
                            //console.log(that.joke);
                            that.joke=response.data;
                        },function(err){
                            console.log(err.data);
                        })
                    }
                }
            })
        </script>
    </body>
</html>
  • axios回调函数中的this已经改变,无法访问到data中的数据
  • 把this保存起来,回调函数中直接使用保存的this即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值