Vuetify:如何配置 VueRouter 在新选项卡上打开链接?

2024-03-01

我有一个带有用户可以单击的菜单的导航栏。有些链接需要打开一个新选项卡。这就是我所拥有的,但我无法让它发挥作用。

<template>
    <nav>
        <v-app-bar text app color="blue">
            <v-app-bar-nav-icon class="white--text" @click="drawer = !drawer"></v-app-bar-nav-icon>
            <v-app-bar-title class="text-uppercase white--text">
                <span class="font-weight-light">Logo</span>
                <span>Global</span>
            </v-app-bar-title>
        </v-app-bar>

        <v-navigation-drawer v-model="drawer" app class="grey lighten-1">
            <v-list>
                <img class="ml-5 mb-3" src="../assets/Logo-Blue.png" width="70" />

                <v-list-item v-for="link in links" :key="link.text" router :to="link.route" @click="go(link)">
                    <v-list-item-action>
                        <v-icon>{{ link.icon }}</v-icon>
                    </v-list-item-action>
                    <v-list-item-content>
                        <v-list-item-title> {{ link.text }} </v-list-item-title>
                    </v-list-item-content>
                </v-list-item>
            </v-list>
        </v-navigation-drawer>
    </nav>
</template>
<script>
export default {
    data() {
        return {
            drawer: true,
            links: [
                { icon: 'home', text: 'Dashboard', route: '/dashboard', newTab: false },
                { icon: 'leaderboard', text: 'Stats', route: 'www.google.com ', newTab: true },
            ]
        }
    },
    methods: {
        go(link) {
            console.log('go run ...')
            console.log(link)
            console.log(process.env.APP_URL)

            if (!link.newTab) {
                this.$router.push({ path: link.route })
            } else {
                window.open(link.route)
            }
        }
    }
}
</script>

src/路由器/index.js

const router = new VueRouter({
    mode: 'history',
    base: process.env.BASE_URL,
    routes
})

export default router

我做错了什么吗?

打开一个新选项卡似乎可以工作,但它一直在我的本地主机 URL 前面。


不要使用click- 处理程序v-list-item,因为这会破坏为路由生成的底层锚标记,并且具有可访问性影响。坚持v-list-item内置用于路由的 props:

  • href:创建外部链接<v-list-item>, 使用href支柱。内部链接应该使用to反而。

  • target:要在单击链接时打开新窗口,请使用target="_blank" prop.

A v-list-item链接到外部 URL 将使用href像这样的道具:

<v-list-item href="https://google.com">Google</v-list-item>

打开新选项卡的人将使用target="_blank" prop:

<v-list-item target="_blank" href="https://google.com">Google</v-list-item>

内部链接使用to道具代替href:

<v-list-item to="/dashboard">Dashboard</v-list-item>

它们可以在新选项卡中打开target="_blank"还有:

<v-list-item target="_blank" to="/dashboard">Dashboard</v-list-item>

Solution

在您的情况下,您有一组项目需要有条件地绑定前面提到的道具。最好使用v-bind与一个物体 https://v2.vuejs.org/v2/api/#v-bind(其中对象的键值对绑定为组件属性)根据每个项目的属性计算:

  1. Compute https://v2.vuejs.org/v2/guide/computed.html#Computed-Properties一个新的链接数组(名为computedLinks)有一个要绑定的新道具(名为linkProps):
export default {
  computed: {
    computedLinks() {
      return this.links.map(link => {
        const isExternalLink = url => /^((https?:)?\/\/)/.test(url)
        const linkProps = {
          [isExternalLink(link.route) ? 'href' : 'to']: link.route,
        }
        if (link.newTab) {
          linkProps.target = '_blank'
        }
        return {
          ...link,
          linkProps,
        }
      })
    },
  },
}
  1. 更新要使用的模板computedLinks,并绑定每个链接的linkProps到其对应的v-list-item:
<v-list-item v-for="link in computedLinks" :key="link.text" v-bind="link.linkProps">
                                   ????                                        ????

demo https://stackblitz.com/edit/vue2-vuetify-v-list-item-with-links?file=src/views/Home.vue

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vuetify:如何配置 VueRouter 在新选项卡上打开链接? 的相关文章

随机推荐

  • winHTTP GET 请求 C++

    我就开门见山吧 这就是浏览器请求的样子 获取 index html HTTP 1 1 这就是 winHTTP 的作用 GET http site com index html http site com index htmlHTTP 1 1
  • Java用户类

    如何解析java用户类和JDBC用户类 问题是当我用完 put 时 sql 中有数据 例如 public User authenctication String eMail String password try con DriverMan
  • String 是关于 switch 的数字类型并且总是编译为 LookupSwitch 吗?

    以下代码返回是否给定String s等于任何其他硬编码字符串 该方法使用switch 这样做的声明 public class SwitchOnString public static boolean equalsAny String s s
  • 在 Laravel 中使用自动控制器路由是一个坏主意

    我从 CodeIgniter 转到 Laravel 那么 使用自动路由到所有控制器是一个坏主意吗 Route controller Controller detect 我应该使用它而不是在routes php 中创建路由吗 是的 这很糟糕
  • 应该如何使用 std::Optional?

    我正在阅读以下文档std experimental optional http en cppreference com w cpp utility optional我很清楚它的作用 但我不明白when我应该使用它或者我应该如何使用它 该网站
  • 如何在perl中将十六进制转换为字符字符串

    我需要将 xx 十六进制字符更改为字符 我正在尝试使用此代码 但它不起作用 usr bin perl w my cadena 40 61 62 print cadena n cadena s g print cad cadena n my
  • 使用 opencv 的 Android 文档扫描仪

    我正在尝试在我的应用程序中开发文档扫描仪 作为我想要实现的目标的一个示例 您可以看一下 Google 云端硬盘应用程序中内置的 Google 文档扫描仪 这允许 检测边缘 操纵透视 显示文档的自上而下视图 我一直在研究一些第三方 api 看
  • android:媒体记录器:启动失败:-38

    简介 如何检查录音是否已在其他应用程序的后台运行 详细信息 如果录音已在本机应用程序的后台运行 录音机 现在我已将录音作为我的应用程序中的功能之一 问题 当我尝试同时在我的应用程序中录制时 出现错误 E MediaRecorder star
  • 子类化 swift 通用可解码类型

    EDIT As 罗布 纳皮尔写道 https stackoverflow com a 49540809 9565342 Xcode 9 2 中存在该问题 在 Xcode 9 3 中 该问题不再相关 我的服务器 json 响应都打包在里面da
  • 检查类的实例是否存在,如果不存在则创建实例

    我想知道是否可以创建一个函数并向其传递一个类名 然后该函数检查当前类的实例是否存在 如果不存在 则创建该类的实例 此外 如果可能的话 将该变量设置为全局变量并要求将其返回 我意识到 回国可能是唯一的选择 function class nam
  • 通过使用 Docker-Compose 和 Spring Boot 运行的 IP 地址访问远程主机中的 Kafka

    我有一个 docker compose yml 在其中运行动物园管理员 Kafka 卡夫卡连接 and KafDrop 问题是 当我在本地运行时 我可以从我的春季启动应用程序来消费一些主题消息 我需要的是在 Linux 机器上运行相同的配置
  • Textview 不在自定义列表视图中滚动

    我尝试了很多在列表视图中水平滚动文本的方法 我希望我的文本视图之一像选框一样自动水平滚动 我能够设置水平滚动条并在触摸它时滚动 TVad setMovementMethod new ScrollingMovementMethod 这是我的
  • 我的 .Net 应用程序可以引用两个不同版本的 .net 框架库吗?

    假设我有两个项目 P4 和 P3 分别针对 net 4 0 和 3 5 每个项目还具有对 System Data 的引用 对于 P4 它将是 System Data v4 0 0 0 对于 P3 它将是 System Data v2 0 0
  • 正则表达式从字符串末尾获取数字

    我有一个类似 stringNumber 的 id 变量 如下所示 example12 我需要一些 javascript 正则表达式从字符串中提取 12 example 对于所有 id 都是常量 只是数字会有所不同 该正则表达式匹配字符串末尾
  • NHibernate HiLo - 每个实体的新列和 HiLo 捕获

    我目前正在为我的课程使用 hilo id 生成器 但只是使用了最少的设置 例如
  • java是纯粹的面向对象吗?

    我们说java不是纯粹面向对象的 因为原始数据类型不是对象 但是在下面的代码中 对象如何保存原始数据类型 public class Test public Object meth Object obj System out println
  • HTML 生成的带有页眉、页脚和水印的 Microsoft Word 文档

    我正在寻找由 HTML 生成的 Microsoft Word 文档的示例 它应包含页眉 页脚和水印 这是一些示例 希望它可以帮助其他尝试使用 HTML 生成 ms word doc 文件的人
  • 删除一组中只有一个观察的条目

    在这里 我想删除按日期对给定城市只有一个条目的条目 例如 我想删除纽约和旧金山条目 因为它们在 4 11 和 4 12 上只有 1 个观察值 day City age 4 10 Miami 30 4 10 Miami 23 4 11 New
  • 使用 process.waitforexit() 时线程被中止错误

    我下面的代码是从 while 循环调用的 因此它连续执行多次 有时 但并非总是如此 我最终会在 p WaitforExit 上收到线程被中止错误 有人对此有任何见解吗 我应该在 p WaitForExit 之后调用 p Close 吗 st
  • Vuetify:如何配置 VueRouter 在新选项卡上打开链接?

    我有一个带有用户可以单击的菜单的导航栏 有些链接需要打开一个新选项卡 这就是我所拥有的 但我无法让它发挥作用