3.vue 指令

3.10 v-text和v-html

更新 DOM 对象的 innerText innerHTML

  • 语法:

    • v-text="vue数据变量"

    • v-html="vue数据变量"

  • 注意: 会覆盖插值表达式

 v-text 把值当成普通字符串显示

 v-html 把值当做 html  解析

<template>
  <div>
    <p v-text="str"></p>
    <p v-html="str"></p>
      <!-- 注意: v-text或v-html会覆盖插值表达式 -->
  </div>
</template>
​
<script>
export default {
  data() {
    return {
      str: "<span>我是一个span标签</span>"
    }
  }
}
</script>

3.11 v-show和v-if

控制标签的隐藏或出现

v-if:指令用于条件性地渲染一块内容。

这块内容只会在指令的表达式返回 true 值的时候被渲染。

  • 用法:

    • v-if :在 <template> 元素上使用 v-if 条件渲染分组

    • 因为 v-if 是一个指令,所以必须将它添加到一个元素上。但是如果想切换多个元素呢?此时可以把一个 <template> 元素当做不可见的包裹元素,并在上面使用 v-if。最终的渲染结果将不包含 <template> 元素。

    • v-show:不同的是带有 v-show 的元素始终会被渲染并保留在 DOM 中。v-show 只是简单地切换元素的 CSS property display。

    • 注意,v-show 不支持 <template> 元素,也不支持 v-else

  • 语法:

    • v-show="vue变量"

    • v-if="vue变量"

代码案例:

<template>
  <div>
    <div>
      <p v-if="age >=18">我成年了,可以看电影</p>
      <!-- <p v-if="age<=18">未成年禁止看电影</p> -->
      <p v-else>还需要等几年</p>
    </div>
  </div>
</template>
<script>
export default {
    data(){
        return{
         age: 15
        };
    }
    
}
</script>

<template> 元素上使用 v-if 条件渲染分组

<template>
  <div>
    <div>
      <p v-if="age >=18">我成年了,可以看电影</p>
      <!-- <p v-if="age<=18">未成年禁止看电影</p> -->
      <p v-else>还需要等几年</p>
      <template v-if="age>=18">
        <p>电影名字:{{videName}}</p>
        <p>年龄:{{age}}</p>
        <p>电影时常:{{time}}</p>
      </template>
    </div>
  </div>
</template>
<script>
export default {
    data(){
        return{
         age: 18,
         videName:"超能人",
         time:"1h20m"
        };
    }
    
}
</script>
  • 原理

    • v-show 用的display:none隐藏 (频繁切换使用)

    • v-if 直接从DOM树上移除

  • 高级

    • v-else使用

v-show代码示例

<template>
    <div>
      <p v-show="sex=='man'">男生</p>
      <p v-show="sex=='woman'">小女生</p>
    </div>
</template>
<script>
export default {
    data(){
        return{
         sex:"woman"
        };
    }
}
</script>

v-if和v-show的区别:

<template>
    <!--
        带有v-show的元素始终会被渲染并保留在Dom中,主要作用 频繁切换页面状态的时候使用
        v-if:对应false的时候,对应的元素和子元素都不会渲染,
        v-if主要是控制dom元素的创建和销毁,运行时条件很少改变的元素,也就时一次性选择的那种
      -->
    <p v-if="isshow">v-if标题页面</p>
    <p v-show="!isshow">v-show标题页面</p>
    <button @click="isshow=!isshow">切换页面</button>
</template>
<script>
export default {
    data(){
        return{
        isshow:"true"
        };
    }
}
</script>

 

 原理
  • v-show 用的display:none隐藏 (频繁切换使用)

  • v-if 直接从DOM树上移除

综合示例:

<template>
  <div>
      <!-- v-show 或者 v-if
       v-show="vue变量"
       v-if="vue变量"
     -->
    <h1 v-show="isOk">v-show的盒子</h1>
    <h1 v-if="isOk">v-if的盒子</h1>
​
    <div>
         <!-- 
      v-show隐藏: 采用display:none   // 频繁切换
      v-if隐藏:   采用从DOM树直接移除 // 移除
     -->
      <p v-if="age > 18">我成年了</p>
      <p v-else>还得多吃饭</p>
    </div>
  </div>
</template>
​
<script>
export default {
  data() {
    return {
      isOk: true,
      age: 15
    }
  }
}
</script>

使用v-show和v-if以及v-else指令, 方便通过变量控制一套标签出现/隐藏

案例编辑-折叠面板

此案例使用了less语法, 项目中下载模块

npm install less@4.1.2 less-loader@6.2.0 -D
或者
npm install less@4.1.2
npm install less-loader@6.2.0 -D

代码实现:

<template>
  <div >
    <div id="app01">
        <h3>案例:折叠面板</h3>
        <div>
            <div class="title">
                <h4>程序员之路</h4>
                <!-- 1.绑定点击事件 -->
                <span class="btn" @click="btn">
                <!-- 4. 根据isShow的值显示不同文字 -->
                {{ isShow ? '收起' : '展开'}}
                </span>
            </div>
            <!-- 2. v-show配合变量来控制标签隐藏出现 -->
            <div class="container" v-show="isShow">
                <p>少时狂把编程想,</p>
                <p>无畏赴身IT行。</p>
                <p>纵使荣华未可近,</p>
                <p>我自coding又何妨!</p>
            </div>
        </div>
    </div>
  </div>
</template>
<script>
export default {
    data(){
        return{
            isShow:"true"
        }
    },
    methods: {
        btn(){
             // 3. 点击时, 把值改成false
            this.isShow=!this.isShow
        }
    }
}
</script>
<style lang="less">
    body{
        background-color: #CCC;
        #app01 {
            width: 400px;
            margin: 20px auto;
            background-color: #fff;
            border: 4px solid blueviolet;
            border-radius: 1em;
            box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.5);
            padding: 1em 2em 2em;
         h3 {
            text-align: center;
            }
        .title {
            display: flex;
            justify-content: space-between;
            align-items: center;
            border: 1px solid #ccc;
            padding: 0 1em;
            }
        .title h4 {
            line-height: 2;
            margin: 0;
            }
        .container {
            border: 1px solid #ccc;
            padding: 0 1em;
            }
        .btn {
            /* 鼠标改成手的形状 */
            cursor: pointer;
        }
    }
}
​
</style>

3.12 v-for

 列表渲染, 所在标签结构, 按照数据数量, 循环生成

  • 语法

    • v-for="(值, 索引) in 目标结构"

    • v-for="值 in 目标结构"

  • 目标结构:

    • 可以遍历数组 / 对象 / 数字 / 字符串 (可遍历结构)

  • 注意:v-for的临时变量名不能用到v-for范围外

v-for入门程序:

<template>
  <div >
    <!--v-for 基本使用 v-for 指令需要使用 item in items 形式的特殊语法,
    其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名-->
    <ul>
        <li v-for="item in person" :key="item">{{item}}</li>
    </ul>
    <!--获取下标的方式
    v-for 还支持一个可选的第二个参数,即当前项的索引。 
    用法:(item , index)
    -->
    <ul>
        <!-- <li v-for="(item,index) in person" :key="item">{{item}}--{{index}}</li> -->
        <li v-for="(item,index) in person" :key="item">
            {{parentMessage}}--{{item.message}}--{{index}}</li>
    </ul>
     <!--使用of 代替in-->
    <ul>
        <li v-for="(item,index) of person" :key="item">{{item.message}}--{{index}}</li>
    </ul>
    
  </div>
</template>
<script>
export default {
    data(){
        return{
            parentMessage:"parent",
            //person:["佩奇","乔治","小猪"]
            person:[{message:"佩奇"},{message:"乔治"},{message:"小猪"}]
        }
    }
    
}
</script>

v-for 里使用对象你也可以用 v-for 来遍历一个对象的 property。

<template>
  <div >
    <!--在v-for中使用对象,item 代表的是value值,key代表的是key健值-->
    <ul>
        <!-- <li  v-for="item in personObj" :key="item">{{item}}</li> -->
        <li  v-for="(item,key) of personObj" :key="key">
            {{key}}--{{item}}
        </li> 
    </ul>
    <!--用第三个参数作为索引-->
    <ul>
        <!-- <li  v-for="item in personObj" :key="item">{{item}}</li> -->
        <li  v-for="(item,key,index) of personObj" :key="index">
            {{key}}--{{index}}--{{item}}
        </li> 
    </ul>
  </div>
</template>
<script>
export default {
    data(){
        return{
            personObj:{
                name:'佩奇',
                age:'18',
                sex:'女',
                birthday:'2023-03-20'
            }
        }
    }
    
}
</script>

综合案例演示:

<template>
  <div id="app">
    <div id="app">
      <!-- v-for 把一组数据, 渲染成一组DOM -->
      <!-- 口诀: 让谁循环生成, v-for就写谁身上 -->
      <p>学生姓名</p>
      <ul>
        <li v-for="(item, index) in arr" :key="item">
          {{ index }} - {{ item }}
        </li>
      </ul>
​
      <p>学生详细信息</p>
      <ul>
        <li v-for="obj in stuArr" :key="obj.id">
          <span>{{ obj.name }}</span>
          <span>{{ obj.sex }}</span>
          <span>{{ obj.hobby }}</span>
        </li>
      </ul>
​
      <!-- v-for遍历对象(了解) -->
      <p>老师信息</p>
      <div v-for="(value, key) in tObj" :key="value">
        {{ key }} -- {{ value }}
      </div>
​
      <!-- v-for遍历整数(了解) - 从1开始 -->
      <p>序号</p>
      <div v-for="i in count" :key="i">{{ i }}</div>
    </div>
  </div>
</template>
​
<script>
export default {
  data() {
    return {
      arr: ["小明", "小欢欢", "大黄"],
      stuArr: [
        {
          id: 1001,
          name: "孙悟空",
          sex: "男",
          hobby: "吃桃子",
        },
        {
          id: 1002,
          name: "猪八戒",
          sex: "男",
          hobby: "背媳妇",
        },
      ],
      tObj: {
        name: "小黑",
        age: 18,
        class: "1期",
      },
      count: 10,
    };
  },
};
</script>

vue最常用指令, 铺设页面利器, 快速把数据赋予到相同的dom结构上循环生成

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值