Prop是由父组件传递数据到子组件
1.通过props数组传递数据
<div id="vm">
<blog-t title="标题" subtitle='副标题'></blog-t>
</div>
<script>
const app = Vue.createApp({});
app.component('blog-t',{
props:['title','subtitle'],
template: `<h4>{{ title }}</h4><br>{{subtitle}}`
});
const vm = app.mount('#vm');
</script>
2.父向子传递数据
<div id="vm">
<button-a :title='title'></button-a>
</div>
<script type="module">
import * as obj from './main.js'
const app = Vue.createApp({
data() {
return {
title:'abcd'
}
}
});
app.component('button-a', obj.btn1)
const vm = app.mount('#vm');
</script>
main.js
const btn1 = {
props:['title'],
template: `<button>{{title}}</button>`
}
export {btn1}
3.为Prop指定类型
<div id="vm">
<blog-t title="标题" subtitle='副标题'></blog-t>
</div>
<script>
const app = Vue.createApp({});
app.component('blog-t', {
props: {
'title': String,
//会警告错误
'subtitle': Number
},
template: `<h4>{{ title }}</h4><br>{{subtitle}}`
});
const vm = app.mount('#vm');
</script>
4.向子组件传递其他类型
(1) int 类型
传静态数字类型:使用v-bind
<div id="vm">
<button-a :title='10'></button-a>
</div>
<script type="module">
import * as obj from './main.js'
const app = Vue.createApp({
// data() {
// return {
// title:'abcd'
// }
// }
});
app.component('button-a', obj.btn1)
const vm = app.mount('#vm');
</script>
////////////////// main.js /////////////
const btn1 = {
props:['title'],
template: `<button>{{ typeof title}}</button>`
}
export {btn1}
传动态数据类型:
<div id="vm">
<button-a :title='title'></button-a>
</div>
<script type="module">
import * as obj from './main.js'
const app = Vue.createApp({
data() {
return {
title:10
}
}
});
app.component('button-a', obj.btn1)
const vm = app.mount('#vm');
</script>
/////////////////main.js ///////
同上
(2)bool
传静态数据类型:
<div id="vm">
<button-a :title="true"></button-a>
</div>
<script type="module">
import * as obj from './main.js'
const app = Vue.createApp({
});
app.component('button-a', obj.btn1)
const vm = app.mount('#vm');
</script>
传动态
<div id="vm">
<button-a :title="title"></button-a>
</div>
<script type="module">
import * as obj from './main.js'
const app = Vue.createApp({
data() {
return {
title:true
}
}
});
app.component('button-a', obj.btn1)
const vm = app.mount('#vm');
</script>
(3)数组
静态
<div id="vm">
<button-a :title="[234, 266, 273]"></button-a>
</div>
<script type="module">
import * as obj from './main.js'
const app = Vue.createApp({
});
app.component('button-a', obj.btn1)
const vm = app.mount('#vm');
</script>
/////////////////////main.js////////////
const btn1 = {
props:['title'],
template: `<button>{{ title.constructor == Array}}</button>`
}
export {btn1}
动态
<div id="vm">
<!--一直默认为ture-->
<!-- <button-a title></button-a> -->
<button-a :title="title"></button-a>
</div>
<script type="module">
import * as obj from './main.js'
const app = Vue.createApp({
data() {
return {
title:[234, 266, 273]
}
}
});
app.component('button-a', obj.btn1)
const vm = app.mount('#vm');
</script>
(4)对象
静态
<div id="vm">
<button-a :title="{a:10}"></button-a>
</div>
<script type="module">
import * as obj from './main.js'
const app = Vue.createApp({
});
app.component('button-a', obj.btn1)
const vm = app.mount('#vm');
</script>
////////////////////main.js////////////////////
const btn1 = {
props:['title'],
template: `<button>{{ title.constructor == Object}}</button>`
}
export {btn1}
动态
<div id="vm">
<button-a :title="title"></button-a>
</div>
<script type="module">
import * as obj from './main.js'
const app = Vue.createApp({
data() {
return {
title:{a:10}
}
}
});
app.component('button-a', obj.btn1)
const vm = app.mount('#vm');
</script>
5.prop验证
<div id="vm">
<button-a :propa='propa' :propb='propb' :propc='propc' :propf='propf' ></button-a>
</div>
<script type="module">
import * as obj from './main.js'
const app = Vue.createApp({
data() {
return {
propa: 10,
propb: 'bbb',
propc: 'ccc',
// prope: {
// id: 1,
// title: null
// }
propf:'success',
//propg:function(){ return 'function'}
}
}
});
app.component('button-a', obj.btn1)
const vm = app.mount('#vm');
</script>
main.js
const btn1 = {
props: {
//基础类型检查
propa: Number,
//接受多种类型
propb: [String, Number],
// //必填
propc: {
type: String,
required: true
},
//带默认值
propd: {
type: String,
default: 'ddd'
},
//带默认值的对象
prope: {
type: Object,
default: function () {
return { id: 10, title: 'hello' }
}
},
// 自定义验证函数
propf:{
validator: function(value) {
// 这个值必须匹配下列字符串中的一个
return ['success', 'warning', 'danger'].indexOf(value) !== -1
}
},
// 具有默认值的函数
propg:{
type: Function,
// 与对象或数组默认值不同,这不是一个工厂函数 —— 这是一个用作默认值的函数
default: function() {
return 'Default function'
}
}
},
template: `<button>{{ typeof propa }},{{propd}},{{prope.title}},{{propf}},{{propg()}}</button>`
}
export { btn1 }