Vue——渲染(文本、列表)、列表数据更新

本文详述了Vue中如何进行文本渲染,包括使用{{ }}、v-html和v-text。接着讨论了列表渲染,利用v-for指令处理数组实例,并给出了添加序号、依据索引应用不同类名的示例。最后,文章探讨了列表数据的同步更新问题,解释了哪些操作会触发数据更新,以及如何通过Vue.set()方法正确地更新属性值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文本渲染


方法

{{ }}

把内容写在双话括号内,也可以写简单的js表达式。(加减乘除,三元运算符等)


v-html

将模版便签内的内容展示到页面


v-text

将模版便签以及内容展示到页面


实例
<template>
    <div>
        <p v-text = 'hello'></p>
        <p v-html = 'hello'></p>
    </div>
</template>

<script>
    export default {
        data(){
            return {
                hello : '<span>world</span>'
            }
        }
    }
</script>



渲染结果

v-test

<span>world</span>


v-html

world



列表渲染


方法

v-for


data为数组实例1

与{{ }}配合使用


<template>
    <div>
       <ul>
                     // 遍历内容            输出的样式设置
          <li v-for = 'item in list'> {{ item.name }} - {{item.price}}</li>
       </ul>
    </div>
</template>

<script>
    export default {
        data(){
            return {
                // 一个数组,参数是对象
                list: [
                {
                  name: 'apple',
                  price: '5'
                },
                {
                  name: 'banana',
                  price: '6'
                },
                ]
            }
        }
    }
</script>



data为数组实例2

与v-test配合使用

<template>
    <div>
       <ul>
                      // 遍历内容         输出的样式设置
          <li v-for = 'item in list' v-text = "item.name + '-' +item.price" ></li>
       </ul>
    </div>
</template>



使用实例


添加序号
<template>
    <div>
       <ul>
                     //增加参数index
          <li v-for = '(item, index) in list'> {{ item.name }} - {{item.price}} - {{index}}</li>
       </ul>
    </div>
</template>


根据索引不同,添加不同class


给所有索引为奇数(实际上的偶数)的li,加上class = odd

<template>
    <div>
       <ul>
                                                      //添加odd类  条件是索引能整除2
          <li v-for = "(item, index) in list"  :class= "{odd: index % 2}"> {{ item.name }} - {{item.price}} - {{index}}</li>
       </ul>
    </div>
</template>


data是对象实例
objList:{
    name: 'Tim',
    age: '22',
    weight: '55'
}

//只有一个参数时,为value值

<ul>
                      //这里是value
          <li v-for = "value in objList"> {{ value }} </li>
</ul>

//两个个参数时,写成(value,key)

<ul>
                      //这里是value
          <li v-for = "(value,key) in objList"> {{ key + value }} </li>
</ul>



列表数据同步更新

以下方法触发数据更新

push()  pop()  shift()  unshift()  splice()  sort()  reverse()


以下方法不会触发数据更新

filter()  concat()  slice()  

以及

1)通过下标,改变值

2)改变数组长度


实例

<template>
    <div>
       <ul>
                     //增加参数index
          <li v-for = "(item, index) in list"> {{ item.name + '-' + item.price }}</li>
       </ul>
       //通过v-on指令添加click事件,click事件调用addItem方法
       <button v-on:click = 'addItem'>addItem</button>
    </div>
</template>


<script>
    export default {
        data(){
            return {
                list: [
                {
                  name: 'apple',
                  price: '5'
                },
                {
                  name: 'banana',
                  price: '6'
                },
                ]
            }
        },
        //使用methods创建addItem方法
        methods: {
          addItem (){
              // 数据是一个数组,所以使用list
              this.list.push({
                  name: 'pineapple',
                  price: 200
              })
          }
        }
    }
</script>



解决方案


解决——重设属性值


使用Vue.set( )方法

语法
    Vue.set(目标数组,索引,替换值)


实例

记得记得,组件要import Vue!!!


 methods: {
          addItem (){
              //使用Vue.set()方法
              Vue.set(this.list,1,{
                name: 'pineapple',
                price: 200
              })
          }
        }
### Vue 动态渲染后端返回菜单数据 在构建基于Vue的应用程序时,特别是当涉及到后台管理系统的开发,动态加载和渲染来自后端的菜单数据是一项常见需求。这不仅提高了用户体验,还增强了应用的安全性和灵活性。 为了实现这一目标,在应用程序初始化阶段或用户登录成功之后,应当向服务器发送请求以获取用户的权限信息以及对应的菜单结构[^2]。一旦接收到这些数据,则可以通过编程方式将其转换为适合前端框架使用的格式,并利用组件化的方式展示给最终用户。 下面是一个简单的例子来说明如何操作: #### 获取并解析菜单数据 假设从API得到如下JSON格式的数据作为响应体的一部分: ```json [ { "id": 1, "name": "首页", "path": "/home" }, { "id": 2, "name": "系统设置", "children": [ {"id": 3,"name":"部门管理","path":"/system/department"}, {"id": 4,"name":"角色管理","path":"/system/role"} ] } ] ``` 接下来定义一个函数用于处理上述形式的数据,使之适应于`<router-link>`标签内的`:to`属性绑定: ```javascript function formatMenuData(rawMenus){ const formatted = rawMenus.map(item => ({ ...item, to: item.path ? { path:item.path } : undefined, children: Array.isArray(item.children)?formatMenuData(item.children):undefined })); return formatted.filter(Boolean); } ``` #### 创建递归组件以支持多层嵌套菜单 考虑到实际应用场景中的菜单可能具有多层次的关系链路,因此建议创建一个能够自我调用自身的组件——即所谓的“递归组件”。这样可以方便地表示任意深度级别的子项列表而无需预先知道具体层数量。 ```html <!-- MenuComponent.vue --> <template> <ul class="menu-list"> <li v-for="(menuItem,index) in menuItems" :key="index"> <!-- 如果存在路径则渲染链接;否则仅显示文本节点 --> <router-link v-if="menuItem.to" :to="menuItem.to">{{ menuItem.name }}</router-link> <span v-else>{{ menuItem.name }}</span> <!-- 对有孩子的项目再次调用本组件实例 --> <menu-component v-if="Array.isArray(menuItem.children)" :menu-items="menuItem.children"></menu-component> </li> </ul> </template> <script setup lang="ts"> import { defineProps } from 'vue'; // 定义接收父级传递过来的props参数 const props = defineProps({ menuItems:{ type:Array, required:true } }); </script> ``` 最后一步是在适当的位置引入这个新创建的组件并将之前准备好的菜单数组传入其中即可完成整个流程的设计与实施工作。 通过这种方式可以在Vue环境中有效地管理和呈现由后端提供的复杂层次化的导航条目集合[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值