Vue本地应用(通过Vue实现常见网页效果)

内容绑定,事件绑定

-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">
        <!-- 正常写法 -->
                <!-- 全替换写法,一般不推荐,使用了v-text后H2标签包含内容会被全部替换 -->
                <h2 v-text="message">123213123</h2>
                <!-- 插值表达式写法 -->
                <h2>你好的英文是{{message}}</h2>
        <!-- 字符串拼接一个!的插值表达式写法 -->
                <!-- 全替换写法,一般不推荐,使用了v-text后H2标签包含内容会被全部替换 -->
                <h2 v-text="message+'!'">123123123</h2>
                <!-- 插值表达式写法 -->
                <h2>你好的英文是{{message+"!"}}</h2>
    </div>

    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                message:"Hello",
            }
        })
    </script>
</body>
</html>

-v-html(可以类似于v-text,但可以解析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>v-html</title>
</head>
<body>

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

    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                // content:"Hello",
                content:"<a href='www.baidu.com'>百度一下,你就知道</a>",
            }
        })
    </script>
</body>
</html>

-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>v-on</title>
</head>
<body>

    <div id="app">
        <!--
            <input type="button" v-on:事件名称="方法">
            可以使用 “@” 代替 “v-on:” 使用
            <input type="button" @事件名称="方法">
        -->
        <input type="button" value="v-on指令-单击事件" v-on:click="doIt">
        <input type="button" value="v-on指令@用法-单击事件" @click="doIt">
        <input type="button" value="v-on指令-鼠标移入事件" v-on:monseenter="doIt">
        <input type="button" value="v-on指令@用法-双击事件" @dbclick="doIt">
        <h2 @click="changeFood">{{ food }}</h2>
    </div>

    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    
    <script>
        var app = new Vue({
            el:"#app",
            data:{  
                food:"西兰花炒饭"
            },
            methods:{
                doIt:function(){
                    alert("做程序员!");
                },
                // 点击就多拼接一段字符
                changeFood:function(){
                    // console.log(this.food); //测试
                    this.food += "好好吃"
                },
            },
        })
    </script>
</body>
</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>Document</title>
</head>
<body>
    <div id="app">
        <button @click="subtractNum">-</button>
        <!-- <span v-text>{{num}}</span> -->
        <span v-text=>{{num}}</span>
        <button @click="addNum">+</button>
    </div>

    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                num:1
            },
            methods:{
                // 对data中变量的更改需要使用到this关键字
                addNum:function(){
                    if(this.num==10){
                        alert('已经最大了!');} 
                    else{
                        this.num++;} 
                },
                subtractNum:function(){
                    if(this.num==0){
                        alert('已经最小了!');} 
                    else{
                        this.num--;} 
                },
            },
        })
    </script>
</body>
</html>

显示切换,属性绑定

v-show(根据表达式的真假,通过操纵css中display切换元素的显示和隐藏)

<!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">
        <!-- v-show 的判定结果都是bool值,可以进行简单双符号比较 -->
        <img src="" alt="Picture_1" v-show="isShow">
        <img src="" alt="Picture_2" v-show="isHidden">
        <!-- 点击后年龄变为4,v-show变为false -->
        <img src="" alt="Picture_3" v-show="old >=16 " @click="changeOldTo4">
    </div>

    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
       var app = new Vue({
            el:"#app",
            data:{
                isShow:1,
                isHidden:0,
                old:18,
            },
            methods:{
                changeOldTo4:function(){
                    this.old = 4;
                },
            },
       })
    </script>
</body>
</html>

v-if(根据表达式的真假,通过操纵dom元素来切换元素的去除和恢复,区别于v-show是利用display:none,这个是直接使元素在dom tree中去除,在实际使用中,频繁需要隐藏和现实切换使用v-show,反之使用v-if,操纵dom树对性能影响较大)

<!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-if</title>
</head>
<body>
    <div id="app">
        <input type="button" value="切换isShow" @click="toggleIsshow">
      <p v-if="isShow">Hello Vue!</p>
      <!-- 对比v-show -->
      <p v-show="isShow">Hello Vue! v-show</p>
    </div>

    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
       var app = new Vue({
            el:"#app",
            data:{
              isShow:false,
            },
            methods:{
                toggleIsshow:function(){
                    this.isShow = !this.isShow;
                }
            },
       })
    </script>
</body>
</html>

v-bind(对元素中的属性进行设置,v-bind基本使用方法:v-bind:属性名=表达式,可以不写v-bind,直接使用:元素的写法,通常搭配data中变量进行搭配使用)

<!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="" :title="imgTitle" :class="isActive?'active':''"
        @click = "toggleActive">
        <br>
        <!-- 使用对象的方式设置类名 -->
        <img v-bind:src="imgSrc" alt="" :title="imgTitle" :class = "{active:isActive}"
        @click = "toggleActive">
    </div>

    
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">
    </script>
    
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                imgSrc:"http://www.liuluyi.cn:9999/wp-content/uploads/2022/11/TheTree.png",
                imgTitle:"璐懿",
                isActive:"false",
            },
            methods: {
                toggleActive:function(){
                    this.isActive = !this.isActive;
                }  
            },
        }) 
    </script>
</body>
</html>

列表循环,表单元素绑定

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">
        <!-- v-for常常与数组进行搭配使用 -->
        <!-- 语法是(A,B) in array -->
        <ul>
            <li v-for="(city,index) in vagetables" :title="city.name">
                {{ index+1 }}四大直辖市:{{ city }}
            </li>
        </ul>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">
    </script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                arr:["bejing","shanghai","tianjin","chongqing"],
                vagetables:[
                    {name:"西兰花"},
                    {name:"西红柿"},
                ]
            },
            methods: {
                add:function(){
                    this.vagetables.push({name:"牛奶"});
                },
                remove:function(){
                    this.vagetables.shift();
                }
            },
        })
    </script>
</body>
</html>

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>Document</title>
</head>
<body>
    <div id="app">
        <!-- 在函数之后传递形参,可以传递多个 -->
        <input type="button" value="点击" @click="doIt(666,'老铁')">
        <!-- 
            一个输入框,如果没有enter参数,keyup每输入一个字符都会弹窗,enter之后就只会在会车的时候进行弹窗
            相当于.enter是在事件之后加上.修饰符来限制事件的触发
        -->
        <input type="text" @keyup.enter="sayHi">
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">
    </script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{

            },
            methods: {
                doIt:function(p1,p2){
                    console.log("do It!");
                    console.log(p1,p2);
                },
                sayHi:function(){
                    alert("吃了没?");
                },
            },
        })
    </script>
</body>
</html>

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>v-model</title>
</head>
<body>
    <div id="app">
        <!-- input标签是最常见的表单元素 -->
        <input type="text" v-model="message" @keyup.enter="getMessage">
        <!-- v-test差值表达式,{{}} -->
        <h2 @click="setMessage">{{message}}</h2>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">
    </script>
    <script>
        // 创建Vue实例
        var app = new Vue({
            el:"#app",
            data:{
                message:"Hello",
            },
            methods: {
                    getMessage:function(){
                        alert(this.message);
                    },
                    setMessage:function(){
                        this.message= "我已经修改!";
                    },
            },
        })
    </script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值