<div id="app">
<base-input
label="姓名"
class="name-input"
placeholder="请输入姓名"
test-attrs="$attrs"
></base-input>
</div>
Vue.component("base-input", {
inheritAttrs: true, //此处设置禁用继承特性
props: ["label"],
template: ` <label> {
{label}}- {
{$attrs.placeholder}}- <input v-bind="$attrs"/> </label> `,
mounted: function() {
console.log(this.$attrs);
}
});
const app = new Vue({
el: "#app"
});
在生命周期方法mounted中打印attrs” 传入子组件内部的input标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>arrs与listeners</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<child1 :a-child1="aChild1" :a-child2="aChild2" name1="组件1" name2="组件2" attrs='attrs' @test1="test1" @test2="test2"></child1>
</div>
<!-- 主要是理解$attrs与$listeners这两个属性-->
<script>
Vue.component('child1',{
inheritAttrs: true,
props:['a-child1'],
mounted(){
console.log(this.$attrs);
console.log(this.$listeners);
},
methods:{
test1(){
this.$emit('test1')
}
},
template:`<div>{
{$attrs.name1}}:{
{aChild1}}</br> attrs:{
{this.$attrs}}</br><button @click="test1">test1</button><child2 v-on="$listeners" v-bind='$attrs'></child2></div>`
});
Vue.component('child2',{
inheritAttrs: true,
props:['a-child2'],
mounted(){
console.log(this.$attrs);
console.log(this.$listeners);
},
template:`<div>{
{$attrs.name2}}:{
{aChild2}}</br> attrs:{
{this.$attrs}}</br> <button @click='$listeners.test2'>test2</button></div>`
});
var app = new Vue({
el:"#app",
data:{
aChild1:'加油',
aChild2:'努力',
},
methods:{
test1(){
console.log('child1---')
},
test2(){
console.log('child2---')
}
}
});
</script>
</body>
</html>
上例中,父组件在child1组件中设置两个监听事件test1和test2,分别在child1组件和child1组件内部的child2组件中执行。还设置了三个属性aChild1、aChild2、name1、name2、attrs。其中aChild1、aChild2被对应的组件的prop识别。所以: child1组件中attrs为{ “name1”: “组件1”, “name2”: “组件2”, “attrs”: “attrs” } 效果如下图:
child1组件中的\listeners打印的内容,其中\
child2组件中的listeners打印的内容
vm.$listeners的案例如果 inheritAttrs设置为false,html显示如下:
如果inheritAttrs设置为true,html显示如下:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183676.html原文链接:https://javaforall.cn
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有