javascript 图标而不是文本作为Vue.js中的选项卡

mw3dktmi  于 2023-01-29  发布在  Java
关注(0)|答案(2)|浏览(120)

我想让下面的菜单类似于VK,在那里你点击图标和内容的变化。我实现了不同的内容,但我不能使每个标签有自己的图标。
我提供了一个截图和代码。不要注意风格,我首先需要了解使用Vue CLI的逻辑。

<template>
    <div id="app">
        <font-awesome-icon 
            icon="user-secret" 
            v-for="tab in tabs" 
            :key='tab' 
            @click="currentTab = tab" 
            :class="['tab-button', {active: currentTab === tab}]"
        > 
            {{ tab }}
        </font-awesome-icon>
    
        <component v-bind:is="currentTabComponent"></component>
    </div>
</template>
    
<script>
import Posts from './Posts.vue'
import List from './List.vue'
    
export default {
    data () {
        return {
            currentTab: 'Posts',
            tabs: ['Posts', 'List'],
            icon: 'bell'
        }
    },
    components: {
        tabPosts: Posts,
        tabList: List
    },
    computed: {
        currentTabComponent() {
            return 'tab-' + this.currentTab.toLowerCase()
        }
    }
}
</script>
    
<style scoped>
body {
    overflow: auto;
    padding: 0;
    margin: 0;
}
    
#app {
    position: relative;
    width: 320px;
    height: 400px;
    border:  solid 1px black;
}
.tab-button.active {
    position: relative;
    color: red;
    height: 50px;
    width: 50px; 
}
    
.tab-button {
    position: relative;
    float:  right;
    bottom: 10px;
    height: 50px;
    width: 50px; 
}
</style>
h5qlskok

h5qlskok1#

试试这个:

<div 
            v-for="tab in tabs" 
            :key='tab' 
            @click="currentTab = tab" 
            :class="['tab-button', {active: currentTab === tab}]"
        > 
        <font-awesome-icon >
            icon="user-secret"
        </font-awesome-icon >
    </div>

此外,需要重构此@click="currentTab = tab"

w41d8nur

w41d8nur2#

我假设这个问题已经解决了,但是,无论如何,下面是我使用fontAwesome的贡献,以便您能够理解其中的逻辑:
将数据tabscurrentTab的定义更改为如下形式:
currentTab: {title:'Post section',icon:'bell',page:'Post'}, tabs:{ title:'Post section', icon:'bell', page:'Post' },{ title:'List of posts', icon:'list', page:'List' }
将您的font-awesome-icon标签转换为:

<button v-for="tab in tabs" :key="tab" :class="['tab-button', { active: currentTab === tab }]" @click="currentTab = tab" title="tab.title"><i class="fa" :class="'fa-'+tab.icon"></i></button>

最后将component标记更改为

<component :is="currentTab.page" class="tab"></component>

你可以忽略export default的整个compuded: {}部分

相关问题