1.自定义属性props:即组件中申明的属性,子类承受父类的值
2.原声属性attrs:没有申明的属性,默认主动挂在到组件根元素上,设置inheritAttrs为false可能敞开主动挂载
3.非凡属性class,style挂载到组件根元素上,反对字符串,对象,数组等多种语法.

定义属性的两种形式
1.props: ['title', 'likes', 'isPublished', 'commentIds', 'author'] 无奈对属性值进行校验
2.能够对属性值进行校验

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      }    }  }

案例:

子组件

<template>  <div>     name:{{name}}     <br/>     type:{{type}}     <br/>     list:{{list}}     <br/>     isView:{{isView}}     <br/>     <button @click="handClick">change</button>  </div></template><script>export default {    //子组件的名称    name:"Props",    props:{        name:String,        type:{            validator:function(val){                return ["入门","小站","Rumenz"].includes(val)            }        },        list:{            type:Array,            default:()=>[]        },        isView:{            type:Boolean,            default:false        },        onChange:{            type:Function,            default:()=>{}        }    },    methods:{        handClick(){            this.onChange(this.type==="入门"?"one":"tow")        }    }}</script><style></style>

父组件利用子组件

<template><div id="app">   {{msg}}   <!--属性绑定格局 :[自组件的属性]:[父组件的属性]-->   <Props    :name="name"   :type="type"   :list="list"   :isView="view"   :onChange="onChange"   />  </div></template><script>//导入子组件import Props from './components/Props'export default {  name: 'App',  data() {        return {            msg: "hello 入门小站",            name:"name",            type:"入门",            list:['入门','小站'],            view:true        }    },    methods: {      onChange(val){        this.name=val;      }    },  components: {    Props //必须申明子组件  }}</script><style>#app {  font-family: Avenir, Helvetica, Arial, sans-serif;  -webkit-font-smoothing: antialiased;  -moz-osx-font-smoothing: grayscale;  text-align: center;  color: #2c3e50;  margin-top: 60px;}</style>

源码:https://github.com/mifunc/rum...