条件渲染和循环渲染

条件渲染

 v-if和v-show的功能是一样的 都是当变量值为true时显示 为false时隐藏 但是v-if隐藏是通过移除节点在节点树中的位置,而v-show是通过给标签添加display:none属性实现隐藏效果 就是说v-if是将标签从节点树中直接删除 而v-show是通过给标签添加属性实现的

                  两种方法的优缺点:

        v-if具有较高的 切换消耗,常常用在用户不常切换的模块(频繁操作节点树消耗会很大 为了不浪费内存 所以一般用于不需要频繁切换的模块)

        v-show具有较高的性能消耗,常常用在频繁切换的模块中(虽然解决了消耗问题 但是因为虽然隐藏 但内容都在 所以会给内存造成一定的压力 一般用于需要频繁切换的模块中)

    <div class="box">
      <button @click="fn">点击隐藏</button>
      <p v-if="vif">出现了</p>
      <button @click="fm">点击隐藏</button>
      <p v-show="vshow">出现了</p>
    </div>
    <script>
      new Vue({
        el: ".box",
        data: {
          vif: true,
          vshow: true,
        },
        methods: {
          fn() {
            this.vif = !this.vif;
          },
          fm() {
            this.vshow = !this.vshow;
          },
        },
      });

循环渲染

 v-for会将当前标签内部所有样式元素做循环 el是数组中的元素 arr是循环的数组

    <div class="box">

      <p v-for="el in arr">今天{{el}}</p>

      <!-- 两层for循环嵌套  和js的双重for循环差不多-->

      <div v-for="el in arr2">

        <h1>{{el.name}}</h1>

        <p v-for="el2 in el.son">{{el2}}</p>

      </div>

      <div v-for="el in arr3">

        <h1>{{el.name}}</h1>

      </div>

    </div>

    <script>

      new Vue({

        el: ".box",

        data: {

          arr: [

            "星期一",

            "星期二",

            "星期三",

            "星期四",

            "星期五",

            "星期六",

            "星期日",

          ],

          arr2: [

            { name: "zhangsan", son: [1, 2, 3, 4, 5] },

            { name: "lisi", son: [5, 2, 3] },

            { name: "wangwu", son: [1, 2, 4] },

          ],

          arr3: [

            { name: "zhangsan", son: [1, 2, 3, 4, 5], sum: 5 },

            { name: "lisi", son: [5, 2, 3], sum: 7 },

            { name: "wangwu", son: [1, 2, 4], sum: 2 },

          ],

        },

      });

 

for和if放在了同一个标签中  没有先后顺序的要求,但是先执行for

        这样就会有问题:arr 数组新增一项数据时,会对每一项再做一遍v-if 循环,然后for 循环渲染

    解决方法: 把for弄到最外层,但是这样就会多一层无用的标签,此时可以使用template(元素生成后 该元素会被删除)就不会有多余的标签

 <p v-for="el2 in el.son" v-if="el.sum>5">{{el2}}</p>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

思考猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值