【问题标题】:Vue router linking external websitesVue路由器链接外部网站
【发布时间】:2021-04-10 10:34:51
【问题描述】:

请帮忙。我有带有一堆 url 链接的 JSON 文件。有些是内部的,有些是外部的。

JSON 看起来像这样。

[
 {stuff..., "Url":"https://www.google.com/", stuff..},
 {stuff..., "Url":"/internal-link", stuff..}
]

vue 代码是这样的。

<div class="mobile-link" v-for="link in json" :key="link.id">
  <router-link :to="link.Url">{{link.Name}}</router-link>
</div>

当内部链接传递给&lt;router-link&gt;时可以,但是当传递外部链接时,它不会重定向到外部网站。

区分外部链接并以某种方式通过&lt;router-link&gt; 传递并重定向的最佳方法是什么?

我想将这些链接保存在一个 JSON 中。

感谢您的回答

【问题讨论】:

  • 你应该只给我们一个外部链接的a标签
  • 您可以为每个链接对象添加一个布尔标志,说明它是否是外部链接 - 或者,您可以检查链接是否以 / 开头并天真地说这表示内部链接和其他都是外部链接

标签: javascript html vue.js vue-router


【解决方案1】:

如您的 JSON 所示,您可以使用正则表达式来确定 URL 是本地的还是外部的。

所以,像

<a v-if="/https?:\/\//.test(link.Url)" href="link.Url"></a>
<router-link v-else :to="link.Url">{{link.Name}}</router-link>

Ofc,创建一个封装这个条件的组件会更干净。 :D

这是一篇关于如何实现它的有趣博客文章。它是在谈论 Nuxt.js,但如果你只想要它用于 Vue,它基本上是相同的。
https://lihbr.com/blog/one-link-component-to-rule-them-all

【讨论】:

    【解决方案2】:

    你可以这样做:

    [
     {stuff..., "URL":"https://www.google.com/", "external" : true},
     {stuff..., "URL":"/internal-link", "external": false}
    ]
    

    然后在vue组件中

    <div class="mobile-link" v-for="link in json" :key="link.id">
    <a v-if="link.external" :href="link.url">{{ link.Name }]</a>
    <router-link v-else :to="link.Url">{{link.Name}}</router-link>
    </div>
    

    如果您无法直接编辑阵列,请使用 map function 和正则表达式 ^(http|https)://

    【讨论】:

    • 谢谢塞巴斯蒂安!看起来很简单,工作正常。非常感谢:)
    猜你喜欢
    • 2018-11-10
    • 2018-02-10
    • 2022-01-17
    • 2019-05-20
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2020-12-24
    相关资源
    最近更新 更多