(Vue)组件:父子组件传值($parent,$root,$children,$refs)&常用的第三方组件库

官方-处理边界情况-访问元素&组件

html标签中使用的组件在使用插槽后互相之间可以嵌套,被嵌套的称为嵌套的子组件,嵌套的叫父组件,所有的组件都有一个根组件即vue实例管理的容器。

一、父子组件传值

1.父传子
$parent 获取父组件的实例,还可以继续获取它的父级组件。this.$parent.$parent.house
$root 获取根组件对象。this.$root.house

// Child1组件
Vue.component('Child1', {
    // 通过$parent返回的是父组件对象
    template: `
      

房产信息

{{$parent.house.address}}

{{$parent.house.size}}

` }) // Childson组件 Vue.component('Childson',{ // $parent获取父组件对象;$root获取根组件对象 template:`

房产信息

{{$parent.$parent.house.address}}

{{$parent.$parent.house.size}}


{{$root.house.address}}

{{$root.house.size}}

` }) // Child2组件 Vue.component('Child2', { template: `

汽车信息

{{$parent.car.name}}

{{$parent.car.color}}

` }) // Child3组件 Vue.component('Child3', { template: `

存款信息

{{$parent.money.value}}

{{$parent.money.bank}}

` }) // 暂且将#app对应的内容当成根组件 new Vue({ el: '#app', data: { house: {address: '朝阳区朝阳山庄6栋3单元101',size: '150平'}, car: {name: '奔驰S400',color: '黑色'}, money: {value: '150W',bank: '中国建设银行'} } })

2.子传父
$children 返回的是所有子组件对象的数组,再通过下标获取指定的子组件,顺序是按是在页面中使用的顺序来排序的。
当组件顺序不会发生变化时,用$children;否则就是.....当有的业务不确定使用顺序,并且还要使用子组件的值的时候,用$refs
注意:$refs返回的是一个对象,对象中包含所有带有ref属性的子组件。
不是只有组件才可以添加ref属性,任何标签都可以加ref属性 。

注意: 在父组件创建完成到挂载完成之间,包含完整的子组件的生命周期。父级组件在mounted生命周期函数内,才能获取到$children信息;在子组件的created生命周期函数中,可以获取到父组件的数据。
顺序:父级created => 子级1created => 子级2created => => 子级1mounted => 子级2mounted => 父级mounted

大儿子

姓名:{{son1.name}}

年龄:{{son1.age}}

二儿子

姓名:{{son2.name}}

年龄:{{son2.age}}

小儿子

姓名:{{son3.name}}

年龄:{{son3.age}}

// Child1组件
Vue.component('Child1', {
    // 通过$parent返回的是父组件对象
    template:`
        

房产信息

{{$parent.house.address}}

{{$parent.house.size}}

`, data() { return { name:'张远', age:25 } } }) // Childson组件 Vue.component('Childson',{ // $parent获取父组件对象 // $root获取根组件对象 template:`

房产信息

{{$parent.$parent.house.address}}

{{$parent.$parent.house.size}}


{{$root.house.address}}

{{$root.house.size}}

` }) // Child2组件 Vue.component('Child2', { template:`

汽车信息

{{$parent.car.name}}

{{$parent.car.color}}

`, data() { return { name:'张飞', age:23 } } }) Vue.component('Child3', { template:`

存款信息

{{$parent.money.value}}

{{$parent.money.bank}}

`, data() { return { name:'张强', age:20 } } }) // 暂且将#app对应的内容当成根组件 new Vue({ el:'#app', //数据 data:{ house:{ address:'名城世家3栋1单元1101室', size:'150平米' }, car:{ name:'奔驰S400', color:'黑色' }, money:{ value:'150W', bank:'中国建设银行' }, //接收子组件的数据的对象 son1:{ name:'', age:0 }, son2:{ name:'', age:0 }, son3:{ name:'', age:0 } }, mounted() { // $children返回的是所有子组件对象的数组 // 如果页面的结构出现了调整,这里获取的具体的组件下标就对不上号了。 // console.log(this.$children); /* this.son1.name = this.$children[0].name this.son1.age = this.$children[0].age this.son2.name = this.$children[1].name this.son2.age = this.$children[1].age this.son3.name = this.$children[2].name this.son3.age = this.$children[2].age */ // $refs返回的是一个对象,对象中包含所有带有ref属性的组件 // console.log(this.$refs); this.son1.name = this.$refs.son1.name this.son1.age = this.$refs.son1.age this.son2.name = this.$refs.son2.name this.son2.age = this.$refs.son2.age this.son3.name = this.$refs.son3.name this.son3.age = this.$refs.son3.age } })

二、第三方组件库

PC端开发:element-ui组件库、iView组件库、ant-design vue组件库
移动端开发:Vant组件库







注意:第三方组件库,必须在Vue的下面引入

你可能感兴趣的:((Vue)组件:父子组件传值($parent,$root,$children,$refs)&常用的第三方组件库)