欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > Vue学习:props验证的一个小细节“Prop 名字格式”

Vue学习:props验证的一个小细节“Prop 名字格式”

2024/10/24 6:35:25 来源:https://blog.csdn.net/wangyining070205/article/details/142299114  浏览:    关键词:Vue学习:props验证的一个小细节“Prop 名字格式”

今天学习props验证,用了一个例子,感觉代码没什么错误,控制台也没有报错,可是程序就是不运行 。
父组件调用部分代码如下:

   <div id="app"> <poetry-comp :poemArr="poemList" :num="poemList.length"></poetry-comp></div> 

子组件模板部分代码如下:

<ul> <li v-for="item in poemArr" :key="item.id"><h3>{{item.id}}.{{item.title}}</h3>  <h4>{{item.author}}</h4><p>{{item.content}}</p></li>
</ul> 

script代码部分如下:

const PoetryComp = {        template:'#tp_child',props:{poemArr:Array,      //poemArr类型是数组,                                  }            
} 

后来到官网查看了一下,《传递 prop 的细节》小节中提到,“Prop 名字格式”,如果一个 prop 的名字很长,应使用 camelCase 形式,即驼峰命名法。可以直接在模板的表达式中使用,如下:

<span>{{ poemArr }}</span>

结论

虽然理论上也可以在向子组件传递 props 时使用 camelCase 形式 (使用 DOM 内模板时例外),但实际上为了和 HTML attribute 对齐,我们通常会将其写为 kebab-case 形式,即短横线形式。也就是说,在我用的例子中,父组件调用时,把poemArr 改成poem-arr,然后就正常运行了。

   <div id="app"> <poetry-comp :poem-arr="poemList" :num="poemList.length"></poetry-comp></div> 

完整代码如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta title="viewport" content="width=device-width, initial-scale=1.0"><title>Props对组件传递的数据进行验证</title><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script></head><body> <div id="app"> <!--调用 PoetryComp 组件 :poem-arr短横线命名法,对接后面的poemArr--> <poetry-comp :poem-arr="poemList" :num="poemList.length"></poetry-comp></div> <template id="tp_child"> <!--PoetryComp 子组件模板结构 v-for指令循环输出--> <div> <h3>诗集中共{{num}}首诗</h3> <ul> <li v-for="item in poemArr" :key="item.id"><h3>{{item.id}}.{{item.title}}</h3>  <h4>{{item.author}}</h4><p>{{item.content}}</p></li></ul> </div> </template> </body> <script>const RootComponent = {      data(){ return{ poemList:[{id:1,title:'登鹳雀楼 ',author:'唐·王之涣',content:'欲穷千里目,更上一层楼。'},{id:2,title:'江上',author:'宋·王安石',content:'青山缭绕疑无路,忽见千帆隐映来。'},{id:3,title:'秋词',author:'唐·刘禹锡',content:'古人逢秋悲寂寥,我言秋日胜春朝。'} ],} } }const PoetryComp = {              //创建子组件template:'#tp_child',props:{poemArr:Array,            //poemArr类型是数组,num:{type: Number,        //类型为Number                    validator(value) {   //验证函数,当前数组元素为3个,验证不通过       return value>0 && value<3}                    },                                      }            }    const appObj = Vue.createApp(RootComponent)appObj.component('PoetryComp',PoetryComp)      //组件全局注册appObj.mount("#app")</script>
</html>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com