Prop

  1. Prop验证

    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'].indexOf(value) !== -1
    }
    }
    }
    })
    • prop 会在一个组件实例创建之前进行验证
  2. 非 Prop 的 Attribute

    • 如果一个父组件向其子组件传递一个属性,但是子组件没有使用props接收它,那么这个属性就会被添加到子组件的根元素上去,即:在子组件使用 this.$attrs 就能获取到传入的属性对应的值

    • <div id="app">
      <child-com :name='name' :age='age' :sex='sex'></child-com>
      </div> <script>
      const vm = new Vue({
      el: '#app', // 父组件
      data: {
      name: 'lyl',
      age: 20,
      sex: '男'
      },
      components: {
      childCom: { // 子组件
      template: `
      <div>
      <span> {{name}} </span>
      <grand-com v-bind='$attrs'></grand-com> <!-- 注意看这里,你会发现这里的 v-bind后面直接跟上的不是一个属性而是等号 -->
      <!-- 这样一来我们就把 子组件中没有用到的属性(除class和style以外)全部传到了孙子组件 -->
      </div>
      `,
      props: ['name'], // 这里没有将 age 和 sex 在 props 中接收
      created() {
      console.log(this.$attrs) // 控制台打印:{age:20,sex:男}
      },
      components: {
      grandCom: { // 孙子组件
      template: `
      <div>
      <span>{{$attrs.age}}</span>
      <span>{{$attrs.sex}}</span>
      </div>
      `,
      }
      }
      }
      }
      })
      </script>
    • inheritAttrs 属性的用法

    • <div id="app">
      <child-com :name='name' :age='age' :sex='sex'></child-com>
      </div> <script>
      const vm = new Vue({
      el: '#app', // 父组件
      data: {
      name: 'lyl',
      age: 20,
      sex: '男'
      },
      components: {
      childCom: { // 子组件
      template: `
      <div>
      <span> {{name}} </span>
      </div>
      `,
      props: ['name'], // 这里没有将 age 和 sex 在 props 中接收
      created() {
      console.log(this.$attrs) // 控制台打印:{age:20,sex:男}
      }
      }
      }
      })
      </script>
    • 你就会发现,这里的div标签上面被绑定了age、sex这样的属性,这就是官方文档说的非Prop的属性会被添加被绑定组件的根元素上 ,就如上图所示,但是往往你是不想这样做的,那么就可以使用 inheritAttrs 属性了

      用法:在子组件的模板对象中添加 inheritAttrs: false 即可让这种情况禁止掉

      <div id="app">
      <child-com :name='name' :age='age' :sex='sex'></child-com>
      </div> <script>
      const vm = new Vue({
      el: '#app', // 父组件
      data: {
      name: 'lyl',
      age: 20,
      sex: '男'
      },
      components: {
      childCom: { // 子组件
      inheritAttrs: false, // 父组件传入的name、age、sex属性中除子组件props接收的属性name外,其他属性默认会被浏览器渲染成html属性,但是设置该属性之后则不会被浏览器这样渲染
      template: `
      <div>
      <span> {{name}} </span>
      </div>
      `,
      props: ['name'], // 这里没有将 age 和 sex 在 props 中接收
      created() {
      console.log(this.$attrs) // 控制台打印:{age:20,sex:男}
      }
      }
      }
      })
      </script>

Prop验证、inheritAttrs、$attrs的用法和坑的更多相关文章

  1. cin.getline()的用法和坑

    cin.getline()的用法和坑 cin.getline大致原型:**istream& getline (char* s, streamsize n, char delim='\n');* ...

  2. VueJs组件prop验证简单理解

    今天看了vuejs的组件,看到了prop组件,主要作用是在传入数据的时候对传入的值做判断,写了个小例子. <div id="app"> <my-child :nu ...

  3. Vue组件传值prop验证方式

    在Vue组件开发过程中,父组件要经常给子组件传递数据,在传递数据的过程中,子组件可以使用prop来接收父组件传递的值,同时呢,我们可以为组件的 prop 指定验证要求,例如你知道的这些类型.如果有一个 ...

  4. 苹果IOS内购二次验证返回state为21002的坑

    项目是三四年前的老项目,之前有IOS内购二次验证的接口,貌似很久都没用了,然而最近IOS的妹子说接口用不了,让我看看啥问题.接口流程时很简单的,就是前端IOS在购买成功之后,接收到receipt后进行 ...

  5. 组件Prop验证

    <div id="example"> <kkk></kkk> </div> <script src="https:/ ...

  6. ajax传递数组给controller的实现方法和坑

    这里是前端向后端传递一个数组的方式,参考下面这个示例: (主要是将前端的数组,用 JSON.stringify() 方法json化一下,然后后端springmvc接收到以后,使用 JSONArray  ...

  7. python 一些特殊用法和坑

    https://github.com/leisurelicht/wtfpython-cn

  8. ASP.NET Core 模型验证的一个小小坑

    今天在我们的一个项目中遇到一个 asp.net core 模型验证(model validation)的小问题.当模型属性的类型是 bool ,而提交上来的该属性值是 null ,asp.net co ...

  9. vue3中$attrs的变化与inheritAttrs的使用

    在vue3中的$attrs的变化 $listeners已被删除合并到$attrs中. $attrs现在包括class和style属性. 也就是说在vue3中$listeners不存在了.vue2中$l ...

随机推荐

  1. Java语言中使用OpenMP

    从去年年中,开始学习Java,主要是维护公司用Java编写的服务器软件.目前,该服务器软件遇到一个问题,在下载大文件时,如果同时下载的用户很多, 服务器软件工作会出现异常,有的用户无法下载.服务器硬件 ...

  2. Java内存溢出java.lang.OutOfMemoryError: PermGen space

    今天把以前的一个项目部署在tomcat,启动没问题.因为用到了webservice,当调用webservice中的方法时一直报内存溢出异常 Exception in thread "http ...

  3. HeidiSQL工具导出导入MySQL数据

    有时候,为了数据方便导出导入SQL,我们可以借助一定的工具,方便我们队数据库的移植,可以达到事半功倍的效果.在这里,就给大家简单的介绍一款能方便导出或者导入MySQL的数据. ①首先,选择你要导出的数 ...

  4. 关于对height:100%的研究

    参考此链接: https://segmentfault.com/a/1190000012707337

  5. 2019-8-31-dotnet-Framework-源代码-·-Ink

    title author date CreateTime categories dotnet Framework 源代码 · Ink lindexi 2019-08-31 16:55:58 +0800 ...

  6. es6笔记 day3---Promise

    作用:解决异步回调问题 先知道它的大概语法就好了,这个东西需要平时用到才知道它的用处 语法: let promise= new Promise(function(resolve,reject){ // ...

  7. es6笔记 day1---let和const的应用

    ES6 -> ECMA标准 ES7  ES8 最早是由ECMA-262版本实现的 ---------------------------------------- ES6 也称为ES2015,2 ...

  8. c#中索引器

    https://zhidao.baidu.com/question/59675980.html 不是必要的..相当于数学中的一个函数

  9. 【2016福建省夏令营Day1】数据结构

    Problem 1 楼房(build.cpp/c/pas) [题目描述] 地平线(x轴)上有n个矩(lou)形(fang),用三个整数h[i],l[i],r[i]来表示第i个矩形:矩形左下角为(l[i ...

  10. 如何从0到1设计一个MQ消息队列

    消息队列作为系统解耦,流量控制的利器,成为分布式系统核心组件之一. 如果你对消息队列背后的实现原理关注不多,其实了解消息队列背后的实现非常重要. 不仅知其然还要知其所以然,这才是一个优秀的工程师需要具 ...