Vue入门之v-for、computed、生命周期和模板引用


天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。


燕山雪花大如席,片片吹落轩辕台。
——《北风行》


文章目录

  • Vue入门之v-for、computed、生命周期和模板引用
    • 1. `v-for`
      • 1.1 script setup
      • 1.2 template
      • 1.3 style scoped
      • 1.4 页面效果
    • 2. `computed`
      • 2.1 script setup
      • 2.2 template
      • 2.3 style scoped
      • 2.4 页面效果
    • 3. 生命周期和模板引用
      • 3.1 script setup
      • 3.2 template
      • 3.3 style scoped
      • 3.4 页面效果
    • 4. 代码示例
    • 5. 项目demo


Node.js的下载、安装和配置
node的下载、安装、配置和使用(node.js下载安装和配置、npm命令汇总、cnpm的使用)
Vue3入门之创建vue3的单页应用(vite+vue)
Vue入门第一篇(环境配置、脚手架安装、项目创建、项目运行访问、项目结构详解等)
Vue入门第二篇(基本语法、实例演示)
Vue专栏


Vue入门之v-for、computed、生命周期和模板引用

文末附本文所有示例代码的下载地址以及基于vite构建vue3的项目demo地址

1. v-for

列表渲染
使用v-for渲染列表数据
todo为局部变量,表示当前正在迭代的数组元素,仅在v-for绑定的元素上或其内部访问
id为每个todo对象的唯一标识,且作为属性key绑定到每个li列表

1.1 script setup

script setup标签内的代码

// 6. 列表渲染 v-for渲染一个基于源数组的列表,更新列表方法有两种
// 给每个todo对象一个唯一的id
let id = 0
const newTodo = ref('')
const todos = ref([{id:id++, text:'learn Html'},{id:id++, text:'learn JavaScript'},{id:id++, text:'learn Css'}
])function addTodo(){// 6.1 在原数组上调用变更方法todos.value.push({id:id++, text:newTodo.value})newTodo.value = ''
}
function removeTodo(todo){// 6.2 使用新的数组替换原数组todos.value = todos.value.filter((t)=>t!==todo)
}

1.2 template

template标签内的代码

  <!-- 6.  --><div><h2>6. 列表渲染</h2><form @submit.prevent="addTodo"><input id="ipt-6" v-model="newTodo" required placeholder="new todo"><button id="btn-6" >Add todo</button></form><ul id="u-6"><li v-for="todo in todos" :key="todo.id">{{ todo.text }}<button id="btn-62" @click="removeTodo(todo)">a</button></li></ul></div>

1.3 style scoped

style scoped标签内的代码

/* 6.  */#u-6{height: 400px;width: 400px;text-align: center;border-radius: 20px;background-color: lightsalmon;font-size: 20px;
}
#ipt-6{height: 30px;width: 300px;text-align: center;border-radius: 10px;background-color: wheat;font-size: 20px;
}
#btn-6{height: 30px;width: 100px;text-align: center;border-radius: 10px;background-color: lightblue;font-size: 20px;
}
#btn-62{height: 25px;width: 85px;text-align: center;border-radius: 15px;background-color: lightcoral;font-size: 20px;
}

1.4 页面效果

控制台npm run dev启动项目,访问服务页面http://localhost:5173/
查看页面效果
在这里插入图片描述
在new todo中输入新的项,点击Add todo按钮新增项
点击每项的a按钮进行移除该项
在这里插入图片描述

2. computed

计算属性
通过在todo列表中加入done属性,使用v-model将其绑定到复选框
创建函数hideCompleted实现切换按钮
computed() API 可以计算属性ref,ref会动态地根据其他响应式数据计算其.value

计算属性会自动跟踪其计算所使用的其他响应式状态,并将他们收集为自己的依赖
计算结果会被缓存,并只有在其依赖发生改变时才会被自动更新

2.1 script setup

script setup标签内的代码

// 7.计算属性 使用computed计算属性 
let id2 = 0
const newTodo2 = ref('')
const hideCompleted = ref(false)
const todos2 = ref([{id2:id2++, text2:'learn Html', done:true},{id2:id2++, text2:'learn JavaScript', done:true},{id2:id2++, text2:'learn Css', done:false}
])const filteredTodos = computed(()=>{return hideCompleted.value?todos2.value.filter((t)=>!t.done):todos2.value
})function addTodo2(){todos2.value.push({id2:id2++, text2:newTodo2.value, done:false})newTodo2.value = ''
}
function removeTodo2(todo2){todos2.value = todos2.value.filter((t)=>t!==todo2)console.log("todo2:",todo2)
}

2.2 template

template标签内的代码

  <!-- 7.  --><div><h2>7. 计算属性 </h2><form @submit.prevent="addTodo2"><input id="ipt-7" v-model="newTodo2" required placeholder="nwe todo2"><button id="btn-7">Add todo2</button></form><ul id="u-7"><li v-for="todo2 in filteredTodos" :key="todo2.id2"><input type="checkbox" v-model="todo2.done"><span :class="{done: todo2.done}">{{ todo2.text2 }}</span><button id="btn-72" @click="removeTodo2(todo2)">a</button></li></ul><button id="btn-73" @click="hideCompleted = !hideCompleted">{{ hideCompleted ? 'Show all' : 'Hide completed' }}</button></div>

2.3 style scoped

style scoped标签内的代码

/* 7.  */#u-7{height: 400px;width: 400px;text-align: center;border-radius: 20px;background-color: lightsalmon;font-size: 20px;
}
#ipt-7{height: 30px;width: 300px;text-align: center;border-radius: 10px;background-color: wheat;font-size: 20px;
}
#btn-7{height: 30px;width: 100px;text-align: center;border-radius: 10px;background-color: lightblue;font-size: 15px;
}
#btn-72{height: 25px;width: 85px;text-align: center;border-radius: 15px;background-color: lightcoral;font-size: 20px;
}
#btn-73{height: 30px;width: 200px;text-align: center;border-radius: 15px;background-color: blueviolet;font-size: 20px;
}.done{text-decoration: line-through;
}

2.4 页面效果

控制台npm run dev启动项目,访问服务页面http://localhost:5173/
查看页面效果
在这里插入图片描述
点击隐藏按钮Hide completed隐藏复选框勾选的项
在这里插入图片描述

3. 生命周期和模板引用

使用ref实现模板引用
Vue基于响应式和生命式渲染可以处理所有的dom更新,但有时需要手动操作dom,此时需要使用引用模板
引用模板即指向模板中一个dom元素的ref
在标签中添加属性名ref,属性值自定义,通过在js中引用一个属性值同名的ref变量进行引用
js中声明的ref使用null值来初始化,原因是script setup标签内容执行时dom元素还不存在,引用模板ref只能在组件挂载后访问

要在挂载后执行代码可以用onMounted()函数
被称为生命周期钩子,允许注册一个在组件的特定生命周期调用的回调函数,
钩子除了onMounted还有onUpdated、onUnmounted等

3.1 script setup

script setup标签内的代码

// 8. 声明周期和模板引用 使用ref实现模板引用,必须挂载之后访问
const pElementRef = ref(null)
//之所以使用null值初始化是因为script setup执行时dom元素还不存在,模板引用ref只能在组件挂载后访问onMounted(()=>{pElementRef.value.textContent = 'mounted!'
})

3.2 template

template标签内的代码

  <!-- 8.  --><div><h2>8. 生命周期和模板引用</h2><p id="p-8" ref="pElementRef">Hello</p></div>

3.3 style scoped

style scoped标签内的代码

/* 8.  */
#p-8{height: 30px;width: 200px;text-align: center;border-radius: 15px;background-color: olive;font-size: 20px;
}

3.4 页面效果

控制台npm run dev启动项目,访问服务页面http://localhost:5173/
查看页面效果,在template标签中的值是Hello,但在js代码中通过挂载将值改为了mounted!
在这里插入图片描述

4. 代码示例

以上示例的代码已打包上传到CSDN资源库,可自行下载获取示例代码
下载地址:Vue v-for computed 生命周期和模板引用 语法示例演示代码

5. 项目demo

本文示例代码都是基于vite构建的vue3项目编写,项目demo也已上传CSDN资源库
下载地址:Vue 基于vite构建vue3项目 以及基础语法演示
下载后如想正常运行项目,需先有node环境,可根据文章开始的链接进行下载安装node环境,以及配置node环境变量


感谢阅读,祝君暴富!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统下U-Boot基本操作——UBoot基础知识

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

React基础学习-Day08

React基础学习-Day08 React生命周期&#xff08;旧&#xff09;&#xff08;新&#xff09;&#xff08;函数组件&#xff09; &#xff08;旧&#xff09; 在 React 16 版本之前&#xff0c;React 使用了一套不同的生命周期方法。这些生命周期方法在 React 16 中仍然可以使用…

django报错(二):NotSupportedError:MySQL 8 or later is required (found 5.7.43)

执行python manage.py runserver命令时报版本不支持错误&#xff0c;显示“MySQL 8 or later is required (found 5.7.43)”。如图&#xff1a; 即要MySQL 8或更高版本。但是企业大所数用的还是mysql5.7相关版本。因为5.7之后的8.x版本是付费版本&#xff0c;贸然更新数据库肯定…

RK3562 NPU开发环境搭建

如何在Ubuntu系统&#xff08;PC&#xff09;上搭建RK3562 Buildroot Linux的NPU开发环境&#xff1f;即电脑端运行Ubuntu系统&#xff0c;而RK3562板卡运行Buildroot Linux系统的情况下&#xff0c;搭建RK3562 NPU开发环境。 下面是相应的步骤&#xff08;对应的命令&#xf…

DICOM CT\MR片子免费在线查看工具;python pydicom包加载查看;mayavi 3d查看

DICOM CT\MR片子免费在线查看工具 参考&#xff1a; https://zhuanlan.zhihu.com/p/668804209 dicom格式&#xff1a; DICOM&#xff08;Digital Imaging and Communications in Medicine&#xff09;是医学数字成像和通信的标准。它定义了医学图像&#xff08;如CT、MRI、X…

蓝桥 双周赛算法赛【小白场】

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 蓝桥第14场小白入门赛T1/T2/T3 题目&#xff1a; T1照常还是送分题无需多…

ChatTTS超强的真人AI语音助手下载使用教程

简介 ChatTTS是专门为对话场景设计的文本转语音模型&#xff0c;支持多人同时对话&#xff0c;适用的场景非常丰富&#xff0c;比如LLM助手对话任务&#xff0c;视频配音、声音克隆等。同时支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练&#xf…

AI 基于病理图像分析揭示了一种不同类型的子宫内膜癌| 文献速递-基于人工智能(AI base)的医学影像研究与疾病诊断

Title 题目 AI-based histopathology image analysisreveals a distinct subset of endometrialcancers AI 基于病理图像分析揭示了一种不同类型的子宫内膜癌。 01 文献速递介绍 子宫内膜癌&#xff08;EC&#xff09;有四种分子亚型&#xff0c;具有很强的预后价值和治疗…

如何安装Visual Studio Code

Visual Studio Code&#xff08;简称 VS Code&#xff09; Visual Studio Code 是一款由微软开发的免费、开源的现代化轻量级代码编辑器。 主要特点包括&#xff1a; 跨平台&#xff1a;支持 Windows、Mac 和 Linux 等主流操作系统&#xff0c;方便开发者在不同平台上保持一…

二叉树 初阶 总结

树的基础认知 结点的度&#xff1a;一个结点含有的子树的个数称为该结点的度&#xff1b; 如上图&#xff1a;A的为6 叶结点或终端结点&#xff1a;度为0的结点称为叶结点&#xff1b; 如上图&#xff1a;B、C、H、I...等结点为叶结点 非终端结点或分支结点&#xff1a;度不为0…

采用T网络反馈电路的运算放大器(运放)反相放大器

运算放大器(运放)反相放大器电路 设计目标 输入电压ViMin输入电压ViMax输出电压VoMin输出电压VoMaxBW fp电源电压Vcc电源电压Vee-2.5mV2.5mV–2.5V2.5V5kHz5V–5V 设计说明1 该设计将输入信号 Vin 反相并应用 1000V/V 或 60dB 的信号增益。具有 T 反馈网络的反相放大器可用…

【鸿蒙学习笔记】位置设置・position・绝对定位・子组件相对父组件

官方文档&#xff1a;位置设置 目录标题 position・绝对定位・子组件相对父组件Row Text position position・绝对定位・子组件相对父组件 正→ ↓ Row Text position Entry Component struct Loc_position {State message: string Hello World;build() {Column() {Co…

【Neural signal processing and analysis zero to hero】- 1

The basics of neural signal processing course from youtube: 传送地址 Possible preprocessing steps Signal artifacts (not) to worry about doing visual based artifact rejection so that means that before you start analyzing, you can identify those data epic…

Elasticsearch:如何选择向量数据库?

作者&#xff1a;来自 Elastic Elastic Platform Team 向量数据库领域是一个快速发展的领域&#xff0c;它正在改变我们管理和搜索数据的方式。与传统数据库不同&#xff0c;向量数据库以向量的形式存储和管理数据。这种独特的方法可以实现更精确、更相关的搜索&#xff0c;并允…

【HarmonyOS】关于鸿蒙消息推送的心得体会 (一)

【HarmonyOS】关于鸿蒙消息推送的心得体会&#xff08;一&#xff09; 前言 这几天调研了鸿蒙消息推送的实现方式&#xff0c;形成了开发设计方案&#xff0c;颇有体会&#xff0c;与各位分享。 虽然没做之前觉得很简单的小功能&#xff0c;貌似只需要和华为服务器通信&…

Unity XR Interaction Toolkit的安装(二)

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、安装1.打开unity项目2.打开包管理器&#xff08;PackageManage&#xff09;3.导入Input System依赖包4.Interaction Layers unity设置总结 前言 安装前请注意&#xff1a;需要…

科技论文在线--适合练习期刊写作和快速发表科技成果论文投稿网站

中国科技论文在线这个平台可以作为练手的一个渠道&#xff0c;至少可以锻炼一下中文写作&#xff0c;或者写一些科研方向的简单综述性文章。当然&#xff0c;如果你的老师期末要求也是交一份科技论文在线的刊载证明的话&#xff0c;这篇文章可以给你提供一些经验。 中国科技论…

【Linux服务器Java环境搭建】011在linux中安装Nginx,以及停止或启动Nginx服务

系列文章目录 【Linux服务器Java环境搭建】 前言 又到了周五晚上了&#xff0c;最近工作上有些忙&#xff0c;忙于一个需求频繁变更的项目&#xff0c;都快吐血了&#xff0c;懂得都懂&#xff0c;哈哈&#xff0c;正好有时间了&#xff0c;继续写系列【Linux服务器Java环境搭…

linux远程主机和windows互传

一.winscp 最简单&#xff0c;但有时候会出现连不上 二 .MobaXterm 可以选择多种连接方式 二. 配置samba服务器 1. 新增samba用户 sudo pdbedit -L -v 查看当前samba用户 sudo smbpasswd -a guoziyi 添加samba用户 sudo smbpasswd -x guoziyi 删除samba用户 2. 编辑/etc…

加油卡APP系统开发:在线优惠加油,拓展市场

目前&#xff0c;我国汽车行业发展迅速&#xff0c;用车群体逐年扩大&#xff0c;因此&#xff0c;汽车加油市场规模呈现出了快速增长趋势。不过近年来&#xff0c;油价不断上涨&#xff0c;增加了居民的生活成本&#xff0c;为了节省汽车加油的支出&#xff0c;很多人都开始选…