Vue.js 教程

Vue.js Prop 验证

Vue.js 允许我们为组件的 prop 指定验证要求,例如你知道的这些类型。如果有一个需求没有被满足,则 Vue 会在浏览器控制台中警告你。这在开发一个会被别人用到的组件时尤其有帮助。

为了定制 prop 的验证方式,你可以为 props 中的值提供一个带有验证需求的对象,而不是一个字符串数组。例如:

Vue.component('my-component', {
   props: {
       // 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)
       propA: Number,
       // 多个可能的类型
       propB: [String, Number],
       // 必填的字符串
       propC: {
           type: String,
           required: true
       },
       // 带有默认值的数字
       propD: {
           type: Number,
           default: 100
       },
       // 带有默认值的对象
       propE: {
           type: Object,
           // 对象或数组默认值必须从一个工厂函数获取
           default: function () {
               return { message: 'hello' }
           }
       },
       // 自定义验证函数
       propF: {
           validator: function (value) {
               // 这个值必须匹配下列字符串中的一个
               return ['success', 'warning', 'danger'].includes(value)
           }
       }
   }
})

当 prop 验证失败的时候,(开发环境构建版本的) Vue 将会产生一个控制台的警告。

注意:那些 prop 会在一个组件实例创建之前进行验证,所以实例的属性 (如 data、computed 等) 在 default 或 validator 函数中是不可用的。

完整示例

该示例定义了一个组件,组件的 Prop 通过对象进行定义,包括 Prop 类型、是否必填、默认值和自定义校验器等,代码如下:

<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">
       <input type="text" placeholder="enter title" v-model="title" />
       <my-component v-bind:my-title="title"></my-component>
   </div>

   <script type="text/javascript">
       Vue.component("my-component", {
           props: {
               myTitle: {
                   type: String,
                   // 必填
                   required: true,
                   // 自定义校验器
                   validator: function (value) {
                       return value != null && value.length > 5;
                   }
               },
               myCount: {
                   type: Number,
                   // 默认值为 1024
                   default: 1024
               }
           },
           data: function(){
               return {
                   count: this.myCount
               };
           },
           template: `
               <div style="background:red;">
                   <h2>{{myTitle}}</h2>
                   <p>Count: {{count}}</p>
                   <p>
                       <button v-on:click="incr">myCount++</button>
                   </p>
               </div>
           `,
           methods: {
               incr: function(){
                   this.count += 1;
               }
           }
       });

       var app = new Vue({
           el: "#app",
           data: {
               title: "Hello Vue.js"
           }
       });
   </script>

</body>
</html>

运行效果图:

上图中,当我们删除 title,title 长度小于等于 5 时输出了错误信息。

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号