导航


HTML

CSS

JavaScript

浏览器 & 网络

版本管理

框架

构建工具

TypeScript

性能优化

软实力

算法

UI、组件库

Node

业务技能

针对性攻坚

AI


🔥 v-bind="obj" 展开属性

父组件

<template>
	<div>
    <sub-comp
    	v-bind="obj"
    ></sub-comp>
  </div>
</template>
<script>
export default {
	data() {
		obj: {
			a: 1,
			b: 2
		}
	}
}
</script>

子组件

<template>
	<div>{{ a }} {{ obj.a }}</div>
</template>
<script>
export default {
	props: ['obj', 'a', 'b']
}
</script>

子组件两种方式都能访问

props 支持的验证类型

Untitled

Untitled

null、undefined 可以通过验证

Untitled

🔥 required 必须传值

但加上 required 就可以验证了:

props: {
  age: {
    required: true,
    type: Number
  }
},
<main-login
  :age="undefined"
></main-login>

Untitled

🔥 多类型定义

props: {
  age: [ Number, String ]
},
props: {
  age: {
    required: true,
    type: [ Number, String ]
  }
},

🔥 默认值

props: {
  a: {
    required: true,
    type: Number,
    default: 0
  },
  b: {
    required: true,
    type: Number,
    default: 0
  }
},

🔥 默认的是引用值

props: {
	article: {
    type: Object,
    default() {
      return {
      	title: '',
        content: ''
      }
    }
  }
}

🔥 对传值进行验证

props: {
	btnType: {
    required: true,
    validator(value) {
    	return [
      	'primary',
        'success',
        'warning',
        'danger'
      ].includes(value);
    }
  }
}

🔥 default、validator 中不能使用 data 属性

props: {
	age: {
    required: true,
    type: Number,
    default() {
    	console.log(this.tabData);
    }
  },
}

Untitled

如果 props 验证过多,可以把其提出来单独放个文件

validator.js

export const MyDemo = {
	age: {
    required: true,
    type: Number,
    default() {
    	console.log(this.tabData);
    }
  },
  btnType: {
    required: true,
  	 validator(value) {
    	return [
      	'primary',
        'success',
        'warning',
        'danger'
      ].includes(value);
    }
  }
}

comp.vue

import { MyDemo } from './validator';

export default {
	props: MyDemo
}