vuejs table router-link 标记一个

vuejs table router-link tag a

我想在我的table上添加一个路由器link,直到这里一切正常,但是有这样的情况。我希望它显示为 href。 Table 当我做 router tag="a" 时被损坏 当我设置router tag="tr"时,没有问题,但用户可能想通过右击鼠标打开那个页面并打开一个新的window。因此,如果您能举例说明我如何继续,我将很高兴。从现在开始谢谢你。

const app = new Vue({
    el: '#app',
    data: {
        userList: [
            {
                id: 1,
                name: "Prem",
                age: 18,
                status: "close",
                gender: "male",
            },
            {
                id: 2,
                name: "Chandu",
                status: "close",
                age: 20,
                gender: "female",
            },
            {
                id: 3,
                name: "Shravya",
                status: "open",
                age: 35,
                gender: "female",
            },
            {
                id: 4,
                name: "Shravya",
                status: "blocked",
                age: 35,
                gender: "female",
            }
        ]
    }
});
table {
    font-family: arial, sans-serif;
    border-collapse: collapse;
    width: 100%;
}

td, th {
    border: 1px solid #dddddd;
    text-align: left;
    padding: 8px;
}

tr:nth-child(even) {
    background-color: #dddddd;
}

.dropdown-submenu {
    position: relative;
}

.dropdown-submenu .dropdown-menu {
    top: 0;
    left: 100%;
    margin-top: -1px;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.js"></script>
<script src="https://unpkg.com/vue-router@2.0.0/dist/vue-router.js"></script>

<div id="app">
<table>
    <thead>
    <tr>
        <th>Name</th>
        <th>Age</th>
        <th>Status</th>
        <th>Gender</th>
    </tr>
    </thead>
    <tbody>
    <router-link
        tag="tr"
        v-for="(user, i) in userList" :key="i"
        :to="{ name: 'UserDetail', params: { id:user.id }}"
        >
            <td>{{ user.name }}</td>
            <td>{{ user.age }}</td>
            <td>{{ user.status }}</td>
            <td>{{ user.gender }}</td>
    </router-link>
    </tbody>
</table>
</div>

也许这个问题刚刚发生,因为您正在尝试使用 <a> 标签作为 <td> 的包装器而不是 <tr>.

也许您可以将另一个 <td> 添加到您的 table 以在那里显示 UserDetail。这可能是这样的:

<table>
<thead>
<tr>
  <th>Name</th>
  <th>Age</th>
  <th>Status</th>
  <th>Gender</th>
  <th>Details</th>
</tr>
</thead>
<tbody>
<tr v-for="(user, i) in userList" :key="i">
  <td>{{ user.name }}</td>
  <td>{{ user.age }}</td>
  <td>{{ user.status }}</td>
  <td>{{ user.gender }}</td>
  <td>
    <router-link
        tag="a"
        :to="{ name: 'UserDetail', params: { id:user.id }}"
    >
      Show Details
    </router-link>
  </td>
</tr>
</tbody>
</table>

您尝试做的是行不通的,因为 table 有一个集合结构,不允许 <a> 标签成为 <tbody> 的子标签.

您可以做的是使用 position: absolute 将您的 link“拉伸”到整行,基本上将其置于所有其他内容之上。请注意,这样做会取消 table 中的所有其他互动内容。喜欢按钮和输入。

我从 Bootstrap 复制了 class/css,但即使您不使用它也应该可以使用。

请记住将 position: relative; 放在 <tr> 上,这样 link 就会正确包含在每一行中。

new Vue({
  el: '#app',
  data() {
    return {
      userList: [{
          id: 1,
          name: "Prem",
          age: 18,
          status: "close",
          gender: "male",
        },
        {
          id: 2,
          name: "Chandu",
          status: "close",
          age: 20,
          gender: "female",
        },
        {
          id: 3,
          name: "Shravya",
          status: "open",
          age: 35,
          gender: "female",
        }
      ]
    }
  }
});
.stretched-link::after {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1;
  pointer-events: auto;
  content: "";
  background-color: rgba(0, 0, 0, 0);
}

.position-relative {
  position: relative;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.14/vue.js"></script>

<div id="app" style="padding: 1rem;">
  <table class="table table-hover table-striped table-bordered">
    <thead>
      <tr>
        <th>Name</th>
        <th>Age</th>
        <th>Status</th>
        <th>Gender</th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="(user, i) in userList" class="position-relative">
        <td>{{ user.name }}</td>
        <td>{{ user.age }}</td>
        <td>{{ user.status }}</td>
        <td>
          {{ user.gender }}
          <!-- This can be placed in any of the <td>'s -->
          <a class="stretched-link" :href="`#${user.id}`"></a>
        </td>
      </tr>
    </tbody>
  </table>
</div>