将介绍 Vue.js 中 Prop 的基础知识,涉及知识点:
Prop 属性命名
Prop 属性类型
HTML 中的属性名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符。这意味着当你使用 DOM 中的模板时,camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab-case (短横线分隔命名) 命名,例如:
<script type="text/javascript"> Vue.component('blog-post', { // 在 JavaScript 中是 camelCase 的 props: ['postTitle'], template: '<h3>{{ postTitle }}</h3>' }) </script> <!-- 在 HTML 中是 kebab-case 的 --> <blog-post post-title="hello!"></blog-post>
重申一次,如果你使用字符串模板,那么这个限制就不存在了。
到这里,我们只看到了以字符串数组形式列出的 prop,例如:
props: ['title', 'likes', 'isPublished', 'commentIds', 'author']
但是,通常你希望每个 prop 都有指定的值类型。这时,你可以以对象形式列出 prop,这些属性的名称和值分别是 prop 各自的名称和类型,例如:
props: { // title 类型为字符串 title: String, // likes 类型为数字 likes: Number, // isPublished 类型为布尔值 isPublished: Boolean, commentIds: Array, author: Object, callback: Function, contactsPromise: Promise // or any other constructor }
注意:这不仅为你的组件提供了文档,还会在它们遇到错误的类型时从浏览器的 JavaScript 控制台提示用户。
<html> <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"> <title>Vue</title> <!-- 使用 CDN 引入 Vue 库 --> <!-- <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> --> <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.7.9/vue.js"></script> </head> <body> <div id="app"> <my-component my-title="Hello Vue.js" v-bind:my-count="1024"></my-component> </div> <script type="text/javascript"> Vue.component("my-component", { props: { myTitle: String, myCount: Number }, template: ` <div> <h2>{{myTitle}}</h2> <p>Count: {{myCount}}</p> </div> ` }); var app = new Vue({ el: "#app", data: {} }); </script> </body> </html>
运行效果图: