Vue.js学习(六 v-if)

1. v-if,v-else,v-else-if

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id ="first">
    <!--1. 单独使用v-if:要带双引号-->
    <h2 v-if="true">哈哈</h2>

    <!--2. 从上向下执行 v-if v-else-->
    <h2 v-if="isShow">{{message}}</h2><!--取js中代码-->
    <h2 v-else>{{message}} not show</h2>

    <!--3. v-if, v-else-if ,v-else-->
    <h2 v-if="score>90">优秀</h2>
    <h2 v-else-if="score>80">良好</h2>
    <h2 v-else>及格</h2>

    <!--4. 不建议在html中写太多的逻辑,可以放在函数中-->
    <h2>{{getMark()}}</h2>

    <!--5. 也 可以放在计算属性中-->
    <h2>{{mark}}</h2>
</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    let app = new Vue({
        el:"#first",
        data:{
            message:"你好",
            isShow:true,
            score:100,
        },
        methods:{
            getMark(){
                let message;
                if(this.score>90){
                    message="优秀";
                }else if(this.score>80){
                    message="良好";
                }else{
                    message="及格";
                }
                return message;
            }
        },
        computed:{
            mark(){
                let message;
                if(this.score>90){
                    message="优秀";
                }else if(this.score>80){
                    message="良好";
                }else{
                    message="及格";
                }
                return message;
            }
        }
    })
</script>
</body>
</html>

2. 切换账号-邮箱案列

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="first">
    <!--span标签:表明这是一块内容-->
    <!--两个span中间不能加br,否则v-if和v-else就链接不起来-->
    <span v-if="isUser">
        <!--label for: 点击用户账号,就会锁定for对应的id的输入框-->
        <label for="username">用户账号</label>
        <input type="text" id="username" placeholder="用户账号">
    </span>

    <span v-else>
        <label for="email">用户邮箱</label>
        <input type="text" id="email" placeholder="用户邮箱">
    </span><br>

    <button v-on:click="isUser= !isUser">切换账号</button>
</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    let app = new Vue({
        el:"#first",
        data:{
            isUser:true,
        }
    })
</script>
</body>
</html>

3. 账号切换引发的input复用及解决方案

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="first">
    <!--vue内部 input的复用问题-->
    <!--1. vue在渲染时候,先把页面所有的元素进行虚拟dom渲染,virtural DOM-->
    <!--2. 发现下面两个label类似且互斥,则只在虚拟dom中渲染一个-->
    <!--3. 引发的问题: 在用户账号中输入123,切换到邮箱后,email会出现123字样-->
    <!--4. 解决方案:加key,从而使虚拟dom不认为这两个label是相同的,因此不会复用-->
    <span v-if="isUser">
        <label for="username">用户账号</label>
        <input type="text" id="username" placeholder="用户账号" key="1">
    </span>

    <span v-else>
        <label for="email">用户邮箱</label>
        <input type="text" id="email" placeholder="用户邮箱" key="2">
    </span><br>

    <button v-on:click="isUser= !isUser">切换账号</button>
</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    let app = new Vue({
        el:"#first",
        data:{
            isUser:true,
        }
    })
</script>
</body>
</html>

4. v-show VS v-if

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id = "first">
    <!--1. v-if: 当切换truefalse时,该元素会从dom中创建或者删除-->
    <h2 v-if="isUser" id="aaa">哈哈哈</h2>

    <!--2. v-show:切换时该元素不会从dom中删除或创建,而是增加了行内样式
         style="display:none;"-->
    <h2 v-show="isUser" id="bbb">嘿嘿嘿</h2>

    <!--3. 如何选择: 当频繁切换时,选择v-show,否则选择v-if -->

</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    let app = new Vue({
        el:"#first",
        data:{
            isUser:true,
        }
    })
</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值