1.$attrs:
情景①:父子组价之间:没有在子组件props中接收的属性,子组件可以使用$attrs获取
eg: 父组件:<child :name="name" :age="age" sex="man">
子组件:props:[name]
则 子组件中的$attrs 为{ age:age,sex:'man' }。age为父组件data中定义的变量值
情景②:父组件-子组件-孙子组件:子组件传递v-bind:"$attrs"
eg: 父组件:<son :name="name" :age="age" sex='man'>
子组件:<grandson v-bind="$attrs">
孙子组件:<div>{{$attrs}}</div>
孙子组件中的$attrs为{name:name,age:age,sex:"man"}
2.inheritAttrs
设置inheritAttrs:false 则 不会把父作用域的不被认作 props 的特性绑定 且作为普通的 HTML 特性应用在子组件的根元素上
3.$listeners
用于孙子组件修改父组件状态。
用法:父组件:<child @event="func" />
子组件:<grand v-on="$listeners">
孙子组件:
template:`<div><button@click=" btnClick ">改变名字</button></div>`,
methods:{btnClick (){this.$emit('func','kkkkkk')}}
4.依赖注入 provide/inject
Vue2.2.0之后,Vue还提供了provide/inject选项
优点:在父组件只要声明了provide,在其子组件,孙组件,曾孙组件等能形成上下游关系的组件中交互,无论多深都能通过inject来访问provider中的数据。
provide 提供变量:Object | () => Object
inject 注入变量:Array<string> | { [key: string]: string | Symbol | Object }
eg:
父组件
provide:{
msg:'this is a msg!'
}
子组件、孙子组件或N子组件:
inject:['msg']
5.$parent $children $refs
可获得组件 并访问内部属性
网友评论