【问题标题】:Modifying old code to vue router 4 in vuejs在 vuejs 中将旧代码修改为 vue router 4
【发布时间】:2021-05-01 15:22:30
【问题描述】:

在 Vue Router 4 之前,我有以下标记:

<router-link
              :disabled="!ICanGo(item)"
              :tag="!ICanGo(item) ? 'span' : 'a'"
              :event="ICanGo(item) ? 'click' : ''"
              :to="{ name: 'editUsuario', params: { id: item.id } }"
>{{ item.nome }}</router-link>

使用 Vue Router 4,我现在收到以下警告:

[vue-router]
<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link. 

如何将此代码更改为 Vue Router 4 建议?

【问题讨论】:

    标签: vue.js vue-router


    【解决方案1】:

    基于docs for &lt;router-link&gt;'s v-slot,Vue Router 4 中的等价物是:

    <router-link
      :to="{ name: 'editUsuario', params: { id: item.id } }"
      custom
      v-slot="{ href, navigate }"
    >
      <span v-if="!ICanGo(item)">{{ item.nome }}</span>
      <a v-else :href="href" @click="navigate">{{ item.nome }}</a>
    </router-link>
    

    !ICanGo(item) 时不需要禁用元素,因为在这种情况下&lt;span&gt; 本身没有链接激活。

    demo

    【讨论】:

      【解决方案2】:

      如果你有一个表来使用它的职责,而不是使用这种方法

        <div class="w-full overflow-x-auto">
            <table class="w-full">
              <tbody>
                <nuxt-link
                  v-for="(item, index) in tableItems"
                  :key="index"
                  to="/somewhere"
                  tag="tr"
                  class="
                    duration-300
                    rounded
                    whitespace-nowrap
                    border-b-2 border-gray-200 border-transparent
                    cursor-pointer
                    hover:bg-gray-50
                  "
                  @click.native="doSomething"
                >
                  <td class="py-2 w-1/3">
                    <img src="~/assets/images/img.jpg" />
                  </td>
                  <td class="py-2 w-1/3">
                    <p>Something 1</p>
                  </td>
                  <td class="py-2 w-1/3">
                    <p>Something 2</p>
                  </td>
                </nuxt-link>
              </tbody>
            </table>
          </div>
      

      这会警告你,如果你确实使用 @tony19 方法可能会断线并破坏表的责任,而不是 @tony19 方法及以上这样做:

      <div class="w-full overflow-x-auto">
        <table class="w-full">
          <nuxt-link
            v-for="(item, index) in tableItems"
            :key="index"
            to="/somewhere-good"
            @click.native="doSomething"
          >
            <tbody>
              <tr
                class="
                  duration-300
                  rounded
                  whitespace-nowrap
                  border-b-2 border-gray-200 border-transparent
                  cursor-pointer
                  hover:bg-gray-50
                "
              >
                <td class="py-2 w-1/3">
                  <img src="~/assets/images/img.jpg" />
                </td>
                <td class="py-2 w-1/3">
                  <p>Something 1</p>
                </td>
                <td class="py-2 w-1/3">
                  <p>Something 2</p>
                </td>
              </tr>
            </tbody>
          </nuxt-link>
        </table>
      </div>
      

      我确实使用了nuxt.js 标记链接,即nuxt-link,但如果你也使用router-link 就可以了,而且你可能知道我的元素类是tailwindcss

      注意:如果您的点击事件不起作用,请删除 .native

      编辑:最好使用表格的自然结构而不使用anuxt-link 进行导航,而是使用router.push

      【讨论】:

        猜你喜欢
        • 2021-11-10
        • 2017-09-05
        • 2021-05-17
        • 2017-05-23
        • 2018-12-24
        • 2021-05-26
        • 2011-11-17
        • 2019-10-14
        • 2021-07-10
        相关资源
        最近更新 更多