手把手带你学习Vue框架-Vue指令

一、插值表达式

插值表达式:数据绑定
插值表达式中一般放变量,也可以放表达式等等。

{{name}}
{{message}}
{{1+1}}

注意:当数据不是预定义,而是通过网络获取的,那么网络延迟加载时,页面中会显示插值表达式语法,等到网络加载完毕后,数据进行渲染,这种现象是:插值闪烁

解决:插值闪烁问题可以通过v-text指令和v-html指令

二、v-text

v-text:把数据渲染到标签体中【解决了插值闪烁】
Vue中的v-text 类似于 JavaScript中的 innerText 类似于 jQuery中的text()

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="public/vue.min.js"></script>
</head>
<body>

    <div id="app">
        <h1>{{msg}}</h1>
        <h2 v-text="message"></h2>
        <h2 v-text="msage"></h2>
    </div>

    <script>

        //setInterval(()=>{
            new Vue({
                el:"#app",
                data:{
                    msg:"开心今天学习了Vue,发现他都会,因为他聪明",
                    message:"开心学会了Vue",
                    msage:"<a href='#'>开心认为是标签</a>"
                }
            });
        //},5000)



    </script>
</body>
</html>

三、v-html

v-html:把数据渲染到标签体中,数据:标签【解决了插值闪烁】

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="public/vue.min.js"></script>
</head>
<body>

    <div id="app">
        <h1>{{msg}}</h1>
        <h2 v-text="message"></h2>
        <h2 v-text="msage"></h2>
        <h1 v-html="msage"></h1>
    </div>

    <script>

        //setInterval(()=>{
            new Vue({
                el:"#app",
                data:{
                    msg:"开心今天学习了Vue,发现他都会,因为他聪明",
                    message:"开心学会了Vue",
                    msage:"<a href='#'>开心认为是标签</a>"
                }
            });
        //},5000)



    </script>
</body>
</html>

四、v-if

根据条件进行判断是否显示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="public/vue.min.js"></script>
</head>
<body>

    <div id="app">

        <h1 v-if="bol">这是一个标签</h1>
        <h1 v-else-if="bo">这不是标签</h1>
        <h1 v-else>这是另一个标签</h1>



    </div>

    <script>

        new Vue({
            el:"#app",
            data:{
                bol:true,
                bo:false
            }
        });

    </script>
</body>
</html>

五、v-show

v-show:根据条件进行判断是否显示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="public/vue.min.js"></script>
</head>
<body>

<div id="app">

    <h1 v-show="bol">这是v-show指令</h1>

    <h1 v-if="bo">这是v-if指令</h1>



</div>

<script>

    new Vue({
        el:"#app",
        data:{
            bol:false,
            bo:false
        }
    });

</script>
</body>
</html>

v-if和v-show的区别

  1、v-if
    * 如果条件成立,那么创建该标签,如果条件不成立,那么销毁该标签
    * 创建和销毁,是直接操作DOM
    *  运行时,不经常切换,那么采用v-if
  2、v-show
    * 如果条件成立,那么显示该标签,如果条件不成立,那么隐藏该标签
    *  显示和隐藏,是通过CSS属性设置
    *  运行时,频繁切换,那么采用v-show

六、v-for

v-for:循环遍历数据,渲染页面

1、遍历普通数组

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="public/vue.min.js"></script>
</head>
<body>

<div id="app">

    <ul>
<!--        <li v-for="item in array">{{item}}</li>-->
        <li v-for="(item,index) in array">{{item+index}}</li>
    </ul>

</div>

<script>

    new Vue({
        el:"#app",
        data:{
            array:["开心","玉凤","小原"]
        }
    });

</script>

</body>
</html>

2、遍历对象数组

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="public/vue.min.js"></script>
</head>
<body>

<div id="app">

    <ul>
<!--        <li v-for="item in array">{{item}}</li>-->
        <li v-for="(item,index) in array">{{item.sex+index}}</li>
    </ul>

</div>

<script>

    new Vue({
        el:"#app",
        data:{
            // array:["开心","玉凤","小原"]
            array:[
                {name:"开心",age:19,sex:"男"},
                {name:"玉凤",age:55,sex:"女"},
                {name:"小原",age:21,sex:"男"}
            ]
        }
    });

</script>

</body>
</html>

3、遍历对象

v-for指令参数说明:

v-for="(o1) in user"         o1:属性值
v-for="(o1,o2) in user"      o1:属性值  o2:属性名
v-for="(o1,o2,o3) in user"   o1:属性值  o2:属性名  o3:下标

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="public/vue.min.js"></script>
</head>
<body>

<div id="app">

    <ul>
<!--        <li v-for="obj in user">{{obj}}</li>-->
<!--        <li v-for="(o1,o2) in user">{{o1+">>>>>>"+o2}}</li>-->
        <li v-for="(o1,o2,o3) in user">{{o1+">>>>>"+o2+">>>>"+o3}}</li>
    </ul>

</div>

<script>

    new Vue({
        el:"#app",
        data:{
            user:{name:"开心",age:19,sex:"男"}
        }
    });

</script>

</body>
</html>

七、v-on

1、事件绑定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="public/vue.min.js"></script>
</head>
<body>

<div id="app">

<!-- JS事件写法 -->
<!--    <button οnclick="getData()">获取数据</button>-->
<!-- Vue事件写法 -->
<!--        <button v-on:click="getData()">获取数据</button>-->
<!--        <button v-on:click="getData">获取数据</button>-->
<!-- Vue事件写法-简写 -->
        <button @click="getData">获取数据</button>

        <h1 v-text="message"></h1>

        <button @click="setData">设置数据</button>
</div>

<script>

    /*let vm = new Vue({
        el:"#app",
        data:{
            message:"开心教错了"
        }
    });

    function getData() {
        alert(vm.message)
    }*/

    new Vue({
        el:"#app",
        data:{
            message:"开心教错了"
        },
        methods:{
            /*getData:function () {
                alert(">>>>>")
            }*/

            getData(){
                // alert(">>>>>")
                alert(this.message)
            },
            setData(){
                this.message = "新的数据";
            }
        }
    });



</script>

</body>
</html>

2、事件修饰符

我们之前在开发时,写一个函数不仅要关注数据的业务逻辑如何编写,还需要关注事件的一些其他行为【默认事件、冒泡…】,那么vue帮助我们解决了这件事,我们开发时只需要关注函数中数据的业务逻辑【vue提供了事件修饰符】

  • .prevent【禁用标签默认行为】
  • .self【只有触发自身才会执行】
  • .stop【阻止冒泡】
  • .once【只会执行一次】
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="public/vue.min.js"></script>
</head>
<body>

    <div id="app">

        <a href="http://huya.com" @click.prevent="setMethod">虎牙</a>

        <div style="width: 600px;height: 600px;background-color: red" @click="div1">
            <div style="width: 400px;height: 400px;background-color: yellow" @click.stop="div2">
                <div style="width: 200px;height: 200px;background-color: pink" @click.once="div3">

                </div>
            </div>
        </div>

    </div>

    <script>

        new Vue({
            el:"#app",
            methods:{
                /*setMethod(event){
                    alert(">>>>>")
                    // 禁用标签默认行为
                    event.preventDefault();
                    // 阻止事件冒泡
                    event.stopPropagation();
                }*/
                setMethod(){
                    alert(">>>>>")
                },
                div1(){
                    alert("div1")
                },
                div2(){
                    alert("div2")
                },
                div3(){
                    alert("div3")
                }
            }
        });

    </script>

</body>
</html>

八、v-bind

插值表达式、v-text、v-html指令负责把数据渲染到标签体中,如果想要把数据渲染到属性中或者想要更改属性的值,那么插值表达式、v-text、v-html指令解决不了,那么v-bind指令可以解决该问题

测试:插值表达式更改属性值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="../public/vue.min.js"></script>
</head>
<body>

<div id="app">

    <input type="text" value="{{name}}">

</div>

<script>

    new Vue({
        el:"#app",
        data:{
            name:"开心"
        }
    });

</script>

</body>
</html>

通过v-bind指令更改属性值:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="../public/vue.min.js"></script>
</head>
<body>

<div id="app">

<!--    <input type="text" value="{{name}}">-->
<!--    v-bind更改属性值-->
<!--    <input type="text" v-bind:value="name">-->
<!--简化-->
    <input type="text" :value="name">

    <button @click="setValue">更改属性值</button>
</div>

<script>

    new Vue({
        el:"#app",
        data:{
            name:"开心"
        },
        methods:{
            setValue(){
                this.name = "李开心和玉凤还有小原";
            }
        }
    });

</script>

</body>
</html>

给class属性赋值对象数据:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="../public/vue.min.js"></script>

    <style>

        .red{
            color: red;
        }

        .green{
            color: green;
        }

    </style>
</head>
<body>

<div id="app">

    <h1 :class="{red:className,green:!className}">开心、玉凤和小原,生活的非常和谐,幸福美满,早生贵子</h1>
<!--                 red:true      green:false-->
    <button @click="className = false">更改颜色为绿色</button>
    <button @click="className = true">更改颜色为红色</button>

</div>

<script>

    new Vue({
        el:"#app",
        data:{
            className:true
        },
        methods:{

        }
    });

</script>

</body>
</html>


九、v-model

数据渲染到页面【单向绑定】 + 页面影响数据【单向绑定】 == 数据的双向绑定

页面影响数据,前提是页面中的标签必须是能输入或修改,那么符合要求的有:input、select、text area、components【自定义组件】

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="../public/vue.min.js"></script>
</head>
<body>

<div id="app">

    <input type="text" v-model="value">

    <h1 v-text="value"></h1>
</div>

<script>
    new Vue({
        el:"#app",
        data:{
            value:null
        }
    });

</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘程云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值