每日一学—Vue prop属性
2023-09-11 14:15:13 时间
📚文章目录
📗prop属性
- prop可以像调用方法那样对组件进行传参,当需要给某一个组件传递prop参数时,这个prop就成为vue组件中的data()对象的一部分,可以直接在组件作用域内使用。
- 组件可以支持多个(n个)prop属性变量,任意类型都可以传给对应的prop。
- 当组件内部变量受到组件外部变量的影响时,就需要用prop来搭建变量之间的桥梁。用prop可以定义组件内部变量的名称和数据类型,以及其他数据需求,等同于给组件向外暴露了一个可修改的属性。
🧩prop的大小写
- HTML有一个特性,就是几乎所有的大写字符都会转义为小写字符,这很容易导致在编写的HTML结构时有很多camelCase(驼峰命名,这种命名方式除第一个单词外,其他单词的首字母都大写)的属性、标签转换为与实际不符的小写。
Vue.compoent('sg-component',{ //在JavaScript中是camelCase的 props:[bigTitle], template:'<h3>{{ bigTitle }}</h3>' }) <!-- 在HTML中是kebab-case的 --> <sg-component big-title="hello!"></sg-component>
- 例如,上面的代码,props 中有一个自定义参数 bigTitle 中的T是大写的,但实际上在HTMIL中插人标签属性名时却需要写成 big-title。
- 所以,简单总结一下:如果传人 props 是 aBeD 的名称,那么绑定属性的名称就要为 ab-c-d。找到这个规律平时使用时注意即可,尽量用一个简单词汇体现需要的属性名,少用区分大小写的命名,也是提高编程效率、减少错误率发生的编写规范之一。
🧩prop类型
- 使用字符串值来传递属性值是非常初级的操作方式,更高级的是用对象模式来定义组件参数。
props:['title','thumbs','isReleased','evaluate','creater']
- 上面的方式没有对title、thumbs、isReleased、evaluate、creater这几个参数变量的类型格式进行定义,仅仅只是定义了参数名称。
- 在开发组件时,需要对参数进行规范的格式限定。Vue.js 提供了以对象的形式来定制每一个组件参数,这些属性的名称和值分别是prop各自的名称和类型。
props:{ title:String, thumbs:Number, isReleased:Boolean, evaluate:Array, creater:Object, callback:Function, myPromise:Promise }
- 这样即便是非本组件的开发者引用该组件,也能轻松知道如何传入对应的参数,这不仅为其他开发人员提供了使用组件的参数类型描述,而且当遇到参数类型不匹配的报错时,在控制台用户也能看到具体的报错信息。
📗示例代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="vue3.0.js"></script> <title>Document</title> </head> <body> <div id="app"> <post-list></post-list> </div> <script> const vm = Vue.createApp({}) vm.component('PostList', { data() { return { title: '你好gkd' } }, components: { // 面向对象思想: 声明类 {成员变量,成员函数 get() set()} PostItem: { // props是子组件中的属性,:后边是props的属性值prop,prop可以有多个 props: ['postTitle'], template: '<h3>{{postTitle}}</h3>' } }, template: '<div><PostItem :postTitle="title"></PostItem></div>' }) vm.mount('#app') </script> </body> </html>
📗问题分析
问题1:在当前组件内,postlist和postitem哪个是父组件,哪个是子组件,为什么?
答: postlist是父组件,postitem是子组件,因为postitem是在postlist下创建的数据
问题2: props属性起到了什么作用?
答:1保存数据 2接受传值
问题3: 组件间是通过什么传值的,描述数据流向过程,从哪开始到哪结束?父组件向子组件传值
答:PostList.data.title ->PostItem.props.prop(postTile) {{postTitle}}
📗实现效果
相关文章
- [转] Vue中异步错误处理
- vue+iview使用webpack打包工具上线后丢包问题Loading chunk xxx failed
- Vue - 超详细 “纯前端“ 将文件上传到阿里云 OSS 对象存储,最新阿里云 SDK 上传音频、视频、图片、文档、office 等(保姆级详细示例源码教程,每行代码都有注释小白一看就懂)
- Vue - H5 生成带二维码和文案的宣传海报(可自定义二维码扫描后的内容、海报背景图、文案文字、宽高间距等)用 HTML 写可 DIY 的海报,做完后转为图片供用户保存和转发下载
- Vue - 超详细最新 WangEditor V5 富文本编辑器安装引入及使用教程(内含在 Nuxt.js 项目中引入的解决方案)
- 一文带你理解vue创建一个后台管理系统流程(Vue+Element)
- vue.js-详解三大流行框架VUE_快速进阶前端大咖-Vue基础
- vue 3.0 项目搭建移动端 (八) vue.config.js 配置
- Vue--computed计算属性监听数据变化----与watch,methods对比
- 在vue+node环境下实现对数据以excel形式导出并下载
- VUE-015-解决 vue install 引发的 failed Error: not found: python2 问题
- vue-cli构建vue项目
- 浅谈vue中插件的使用方法Vue.use(xxx),原理及实现
- vue中给请求到的数据对象加属性问题
- 基于vue+leaflet+echart的足迹分享评论平台
- Vue项目常见场景需求的解决方案
- 解决IE报错[vue router]Failed to resolve async component default:strict 模式下不允许分配到只读属性
- Vue计算属性和监听属性
- Vue.js 60分钟快速入门
- Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事件的简单整理
- vue 点击出现下拉菜单,点击下拉菜单以外都要关闭菜单
- Vue中watch浅监听,深监听,同时监听多个属性(巧用computed)
- vue:实现锚点双向滚动/文章章节联动滚动效果