作用域插槽
父组件 : <template> <div class="app"> <tab-control :titles="['衣服', '鞋子', '裤子']" @tab-item-click="tabItemClick"> <template v-slot="props"> <button>{{ props.item }} - {{props.abc}} </button> </template> </tab-control> </div> </template> <script> import TabControl from './TabControl.vue' export default { components: { TabControl }, data() { return { pageContents: [ "衣服列表", "鞋子列表", "裤子列表" ], currentIndex: 0 } }, methods: { tabItemClick(index) { console.log("app:", index) this.currentIndex = index } } } </script> <style scoped> </style>
子组件 : <template> <div class="tab-control"> <template v-for="(item, index) in titles" :key="item"> <div class="tab-control-item" :class="{ active: index === currentIndex }" @click="itemClick(index)"> <slot :item="item" abc="cba"> <span>{{ item }}</span> </slot> </div> </template> </div> </template> <script> export default { props: { titles: { type: Array, default: () => [] } }, data() { return { currentIndex: 0 } }, emits: ["tabItemClick"], methods: { itemClick(index) { this.currentIndex = index this.$emit("tabItemClick", index) } } } </script> <style scoped> .tab-control { display: flex; height: 44px; line-height: 44px; text-align: center; } .tab-control-item { flex: 1; } .tab-control-item.active { color: red; font-weight: 700; } .tab-control-item.active span { border-bottom: 3px solid red; padding: 8px; } </style>
本文来自博客园,作者:杨建鑫,转载请注明原文链接:https://www.cnblogs.com/qd-lbxx/p/16612748.html