【问题标题】:Vue2: Conditionally bind href to A tagVue2:有条件地将href绑定到A标签
【发布时间】:2018-10-09 07:04:01
【问题描述】:

我可以成功地将链接绑定到 A 标签,但它似乎不喜欢我的条件。我的意图是“如果pageName === item.name 不绑定href 属性”。不知何故,除非我写像 :href="pageName === item.name ? 'some text here' : item.link" 这样的东西,否则它总是呈现 href。

例如,如果pageName = 'listing',我期望<a href=""></a>,但我得到<a href="/listing"></a>。不知道我做错了哪一部分。

理想情况下,如果pageName = 'listing',我希望<a></a>,但我不知道如何实现它。提前致谢。

var globalNav = {
    props: ['pageName'],
    template:  `<div id="global-nav">
                    <a 
                            class="nav-item"
                            v-for="(item, i) in items"
                            :key="i + 1"
                            :active="pageName === item.name"
                            :href="pageName === item.name ? '' : item.link"
                    >
                        <i :class="item.icon"></i>
                        <div class="tooltip">
                            <div class="arrow"></div>
                            {{ item.title }}
                        </div>
                    </a>
                </div>`,
    data() {
        return {
            items: [
                {
                    title: 'Dashboard',
                    icon: 'icon-home',
                    link: '/',
                    name: 'dashboard'
                },
                {
                    title: 'Listing',
                    icon: 'icon-listing',
                    link: '/listing',
                    name: 'listing'
                },
                {
                    title: 'Import',
                    icon: 'icon-stackoverflow',
                    link: '/import',
                    name: 'import'
                },
                {
                    title: 'Settings',
                    icon: 'icon-cog',
                    link: '/settings',
                    name: 'settings'
                },
            ]
        };
    }
};

var header = new Vue({
    el: '#header',
    components: {
        'global-nav': globalNav
    },
    data: {
        pageName: pageName
    },
    methods: {
    }
});

【问题讨论】:

  • 您的问题到底是什么?您应该使用条件绑定 (:href="pageName === item.name ? 'some text here' : item.link")。其他一切对我来说似乎很奇怪,听起来它不应该工作:)
  • 你不应该在那里使用:href="item.link"吗?为什么要使用条件?我理解 active 中的条件但在 href 中没有?
  • 嗨 Traxo,由于所有项目都有带值的链接字段,如果我不从中删除链接,活动页面将绑定一个 href 链接并且可点击。

标签: vue.js vuejs2 vue-component


【解决方案1】:

我不推荐您用于实现导航的结构,但我有一个解决您的问题的方法。 您可以在 a 标签上使用带有 v-if 条件的 &lt;template&gt; 标签,如下所示:

template:  `<div id="global-nav">
                <template  v-for="(item, i) in items">
                    <a v-if="pageName !== item.name"
                            class="nav-item"
                            :key="i + 1"
                            :active="pageName === item.name"
                            :href="item.link">
                        <i :class="item.icon"></i>
                        <div class="tooltip">
                            <div class="arrow"></div>
                            {{ item.title }}
                        </div>
                    </a>
                    <a v-else>
                     <i :class="item.icon"></i>
                        <div class="tooltip">
                            <div class="arrow"></div>
                            {{ item.title }}
                        </div>
                    </a>
                </template>
            </div>`,

示例here(不要介意示例中的其余文件,只需要App.vue。为了示例,我对pageName 属性进行了硬编码)

【讨论】:

  • 谢谢allkin,明白了。所以使用 v-if 和 v-else 肯定不会渲染我不想要的部分。当您提到“不推荐结构”时,我对在这种情况下使用的最佳结构非常感兴趣。顺便说一句,我在前端使用纯 Vue。此处不支持服务器端 Vue。
猜你喜欢
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 2013-08-07
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多