当前位置: 首页 > news >正文

【VUE基础】VUE3第五节—核心语法之ref标签、props

ref标签

作用:用于注册模板引用。

  • 用在普通DOM标签上,获取的是DOM节点。

  • 用在组件标签上,获取的是组件实例对象。

用在普通DOM标签上:
在这里插入图片描述

<template><div class="person"><h1 ref="title1">C学安全</h1><h2 ref="title2">前端</h2><h3 ref="title3">Vue</h3><input type="text" ref="inpt"> <br><br><button @click="showLog">点我打印内容</button></div>
</template><script lang="ts" setup name="Person">import {ref} from 'vue'let title1 = ref()let title2 = ref()let title3 = ref()function showLog(){// 通过id获取元素  在dom标签上需要设置id=title1// const t1 = document.getElementById('title1')// 打印内容// console.log((t1 as HTMLElement).innerText)// console.log((<HTMLElement>t1).innerText)// console.log(t1?.innerText)/************************************/// 通过ref获取元素console.log(title1.value)console.log(title2.value)console.log(title3.value)}
</script>

用在组件标签上:
在父组件中设置ref标签,获取到的是子组件对象,还没有获取到真正数据
例如
在这里插入图片描述

//APP.vue
<template><Person ref="xiaoc123"/><button @click="test">测试</button>
</template><script lang="ts" setup>import Person from './components/Person.vue'import {ref} from 'vue'let xiaoc123  = ref()function test(){console.log(xiaoc123.value);}
</script>
//Person.vue
<template><div class="person"><h1 ref="title1">C学安全</h1><h2 ref="title2">前端</h2><h3 ref="title3">Vue</h3><input type="text" ref="inpt"> <br><br><!-- <button @click="showLog">点我打印内容</button> --></div>
</template><script lang="ts" setup name="Person">
import { ref } from 'vue'let name = ref('xiaoc')
let age = ref(20)
</script>

以上代码并没有获取到Person.vue中具体的name,age值
需要使用defineExpose将组件中的数据交给外部,就可以获取到name,age值
例如:
在这里插入图片描述

//APP.vue
<template><Person ref="xiaoc123"/><button @click="test">测试</button>
</template><script lang="ts" setup>import Person from './components/Person.vue'import {ref} from 'vue'let xiaoc123  = ref()function test(){console.log(xiaoc123.value);}
</script>
//Person.vue
<template><div class="person"><h1 ref="title1">C学安全</h1><h2 ref="title2">前端</h2><h3 ref="title3">Vue</h3><input type="text" ref="inpt"> <br><br><!-- <button @click="showLog">点我打印内容</button> --></div>
</template><script lang="ts" setup name="Person">
import { ref,defineExpose } from 'vue'let name = ref('xiaoc')
let age = ref(20)defineExpose({name,age})

Props

在使用

<script setup>
const props = defineProps(['foo'])console.log(props.foo)
</script>

除了使用字符串数组来声明 props 外,还可以使用对象的形式:

// 使用 <script setup>
defineProps({title: String,likes: Number
})

如果你正在搭配 TypeScript 使用

<script setup lang="ts">
defineProps<{title?: stringlikes?: number
}>()</script>

传递不同的值类型

在上述的两个例子中,我们只传入了字符串值,但实际上任何类型的值都可以作为 props 的值被传递。

Number​

<!-- 虽然 `42` 是个常量,我们还是需要使用 v-bind -->
<!-- 因为这是一个 JavaScript 表达式而不是一个字符串 -->
<BlogPost :likes="42" /><!-- 根据一个变量的值动态传入 -->
<BlogPost :likes="post.likes" />

Boolean​

<!-- 仅写上 prop 但不传值,会隐式转换为 `true` -->
<BlogPost is-published /><!-- 虽然 `false` 是静态的值,我们还是需要使用 v-bind -->
<!-- 因为这是一个 JavaScript 表达式而不是一个字符串 -->
<BlogPost :is-published="false" /><!-- 根据一个变量的值动态传入 -->
<BlogPost :is-published="post.isPublished" />

Array​

<!-- 虽然这个数组是个常量,我们还是需要使用 v-bind -->
<!-- 因为这是一个 JavaScript 表达式而不是一个字符串 -->
<BlogPost :comment-ids="[234, 266, 273]" /><!-- 根据一个变量的值动态传入 -->
<BlogPost :comment-ids="post.commentIds" />

Object​

<!-- 虽然这个对象字面量是个常量,我们还是需要使用 v-bind -->
<!-- 因为这是一个 JavaScript 表达式而不是一个字符串 -->
<BlogPost:author="{name: 'Veronica',company: 'Veridian Dynamics'}"/><!-- 根据一个变量的值动态传入 -->
<BlogPost :author="post.author" />

代码演示:
指定固定数据类型

// 定义一个接口,限制每个Person对象的格式
export interface PersonInter {
id:string,
name:string,age:number
}// 定义一个自定义类型Persons
export type Persons = Array<PersonInter>

App.vue中代码:

<template><Person :list="persons"/>
</template><script lang="ts" setup name="App">
import Person from './components/Person.vue'
import {reactive} from 'vue'import {type Persons} from './types'let persons = reactive<Persons>([{id:'e98219e12',name:'张三',age:18},{id:'e98219e13',name:'李四',age:19},{id:'e98219e14',name:'王五',age:20}])
</script>

Person.vue中代码:

<template>
<div class="person">
<ul><li v-for="item in list" :key="item.id">{{item.name}}--{{item.age}}</li></ul>
</div>
</template><script lang="ts" setup name="Person">
import {defineProps} from 'vue'
import {type PersonInter} from '@/types'// 第一种写法:仅接收
// const props = defineProps(['list'])// 第二种写法:接收+限制类型
// defineProps<{list:Persons}>()// 第三种写法:接收+限制类型+指定默认值+限制必要性
let props = withDefaults(defineProps<{list?:Persons}>(),{list:()=>[{id:'asdasg01',name:'小猪佩奇',age:18}]
})
console.log(props)
</script>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《警世贤文》摘抄:勤奋篇、取财篇、疏财篇、是非篇、安心篇、防忧篇(多读书、多看报、少吃零食多睡觉)
  • 解析Spring Boot中的数据迁移工具
  • 视频融合共享平台LntonCVS视频监控汇聚平台工业视频监控系统
  • Linux操作系统探索时间
  • 三级嵌入式 汇编指令
  • java使用poi-tl模版引擎导出word之if判断条件的使用
  • css文字自适应宽度动态出现省略号...
  • IO练习网络爬虫获取
  • 基于Netty的自研流系统缓存实现挑战: 内存碎片与OOM困境
  • 雷池WAF动态防护功能初体验
  • 智能制造热点词汇科普篇——工业微服务
  • .net6 当连接用户的shell断掉后,dotnet会自动关闭,达不到长期运行的效果。.NET 进程守护
  • 手机验证码登入设计思路
  • 校园电动车安全监控和调度系统-计算机毕业设计源码13028
  • mysql快速精通(一)DQL数据查询语言
  • [译] 怎样写一个基础的编译器
  • 「面试题」如何实现一个圣杯布局?
  • 【RocksDB】TransactionDB源码分析
  • happypack两次报错的问题
  • JDK9: 集成 Jshell 和 Maven 项目.
  • js
  • MD5加密原理解析及OC版原理实现
  • MySQL-事务管理(基础)
  • PHP 小技巧
  • React16时代,该用什么姿势写 React ?
  • Service Worker
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端临床手札——文件上传
  • 前端路由实现-history
  • 日剧·日综资源集合(建议收藏)
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 应用生命周期终极 DevOps 工具包
  • 正则与JS中的正则
  • #NOIP 2014#Day.2 T3 解方程
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一)appium-desktop定位元素原理
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET中两种OCR方式对比
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • ??在JSP中,java和JavaScript如何交互?
  • [20150904]exp slow.txt
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [240812] X-CMD 发布 v0.4.5:更新 gtb、cd、chat、hashdir 模块功能
  • [AIGC] Java 和 Kotlin 的区别
  • [AIGC] 深入浅出 Python中的`enumerate`函数
  • [Android]Android开发入门之HelloWorld
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [BeginCTF]真龙之力