1.组件中的父子关系
组件在封装好后,彼此之间是相互独立的,不存在父子关系。
在使用组件的时候,根据彼此的嵌套关系,才形成了父子关系、兄弟关系
1.1使用组件的三个步骤
1)在父组件中使用import语法导入需要的组件
2)使用components 节点注册组件
3)让组件以标签的形式使用
2.组件的props
props 是组件的自定义属性,在封装通用组件的时候,合理地使用props可以极大的提高组件的复用性!
它的语法格式如下:
export default {
//组件的自定义属性
//props中的数据,可以直接在模板结构中使用
//Props中的数据只能读取不能更改,不要修改props的值,终端会报错
//props 里面的属性,也能通过 this访问到
//要想修改props的值,可以把props值转存到data中,因为data中的数据都是可读可写的
props:['自定义属性A','自定义属性B','其他自定义属性'...],
//组件的私有数据
data(){
return {
}
}
}
接下来就给一个简单的模板
父组件(父组件需要components来把值给抛出来这样就能用了)
<template>
<div>
我是父组件
<router-view></router-view>
<children :givevalue="give"></children></div>
</template>
<script>
import children from '../children/children'
export default{
name:'father',
data(){
return{
give:"给值",
};
},
components:{children}
}
</script>
<style>
</style>
子组件
<template>
<div>我是子组件 :{{givevalue}}</div>
</template>
<script>
export default{
name: "children",
props:['givevalue']
}
</script>
<style>
</style>
效果图:
this.$emit:是可以实现双向绑定,向父组件传值
model:
<template>
<div>
<div>父组件数据:{{ msg }}</div>
父组件input:<input type="text" v-model="msg">
<DemoChild leftname="左" rightname="右"></DemoChild>
<ChildTest v-model="msg"/>
</div>
</template>
<script>
import ChildTest from "./children";
import DemoChild from "../components/demochild";
export default {
name: 'ModelTest',
data() {
//这里存放数据",
return {
msg: '双向绑定数据'
};
},
components: { ChildTest,DemoChild },
}
</script>
children:
<template>
<div>
子组件input:<input type="text" :value="value" @input="handler">
</div>
</template>
<script>
export default {
name: 'ChildTest',
// 配置v-model传入子组件的值和响应事件
model: {
prop: 'value', // v-model默认传入值为 value
event: 'input' // v-model默认传入事件名为 input
},
props: ['value'],
methods: {
handler(e) {
this.$emit('input', e.target.value)
}
}
}
</script>
效果图: