【问题标题】:Vue.js 2.0 router link in a div component一个 div 组件中的 Vue.js 2.0 路由器链接
【发布时间】:2017-05-01 07:12:54
【问题描述】:

我可以在vue.js 2.0中这样链接:

<router-link to="home">Home</router-link>

这编译为a 标记。但是如何使用 div 做到这一点?

vue.js 1.0 我是这样做的:

<div v-link="{ name: 'Messages', params: { topic: topic.slug }}">test</div>

这显然不再起作用了。

【问题讨论】:

    标签: javascript vue.js vue-router


    【解决方案1】:

    Vue.js 3

    免责声明:问题是关于 Vue.js 2。我看到了。

    改为使用v-slot,例如:

    <router-link to="/about" custom v-slot="{ navigate }">
      <div role="link" @click="navigate">test</div>
    </router-link>
    
    • custom 阻止创建 a 元素
    • navigate 是为div 提供的功能,用于激活导航
    • role="link" 是可访问性的东西(你可以省略它),但也可以用于 CSS 处理手鼠标光标

    CSS:

    [role="link"]:hover {
      cursor: pointer;
    }
    

    也可以只保留a,因为浏览器现在更擅长处理display:block a,但这是另一回事了。

    【讨论】:

      【解决方案2】:

      Vue 方式

      如果您希望&lt;router-link&gt; 呈现为另一个标签,在您的情况下为div,您可以使用tag prop 指定要呈现到哪个标签,它仍然会监听点击事件进行导航。

      <router-link to="home" tag="div">Home</router-link>
      

      您也可以通过纯 HTML 方式之一来做到这一点:

      方式 1

      <a href="/home">
          <div>
              Home
          </div>
      </a>
      

      方式 2

      <div style="cursor: pointer;" onclick="window.location='/home';">
          Home
      </div>
      

      你也可以在vue中修改第二种方式如下:

      <div style="cursor: pointer;" @click="redirectToHome">
          Home
      </div>
      

      你可以定义redirectToHome方法如下:

      methods: {
        redirectToHome () {
           this.$router.push(
              {
                path: '/home',
              }
           )
       },
      

      【讨论】:

      • 很奇怪 vue.js 弃用了它。这是狡猾的。
      • @Jamie 弃用了什么?
      【解决方案3】:

      好吧,router-link 有一个 tag 属性。你正在寻找这个:

      <router-link to="home" tag="div">Home</router-link>
      

      【讨论】:

        猜你喜欢
        • 2018-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-23
        • 2020-11-03
        • 2023-03-31
        • 2019-06-16
        相关资源
        最近更新 更多