Как v-если router-link: поддерживать, когда значение равно нулю?

#vue.js #vuejs2 #vue-router #vuejs3

#vue.js #vuejs2 #vue-маршрутизатор #vuejs3

Вопрос:

У меня есть router-link настройка, в которой path атрибут to prop иногда может быть нулевым. Это приводит к ошибке, в vue-router которой говорится, что он не может найти ‘indexOf’ null.

Я бы хотел router-link , чтобы он отображался только в том случае, если non-null для него доступно значение для перехода (очевидно). Если значение равно null , то мне не нужна ссылка для существования, или ссылка может просто использоваться в # качестве заполнителя.

Это router-link код:

 <router-link :to="{ path: Post.urlslug, name: 'PostView', params: {URLSlug: Post.urlslug} }">
   <!-- lots of images and text here with their own v-if statements -->
</router-link>
 

Возможно ли иметь условный оператор только для :to привязки, чтобы мне не приходилось выполнять огромное копирование и вставку всего router-link блока для реализации v-if , например, я бы предпочел избежать этого:

  <router-link v-if="Post.urlslug != null amp;amp; Post.urlslug.length" :to="{ path: Post.urlslug, name: 'PostView', params: {URLSlug: Post.urlslug} }">
       <!-- lots of images and text here with their own v-if statements -->
    </router-link>

 <router-link v-else :to="#"> <!-- <= this doesn't work anyway -->
       <!-- lots of images and text here with their own v-if statements -->
    </router-link>
 

Приведенный выше код не работает, потому # что это неприемлемое значение для :to поддержки. Каков наилучший практический способ сделать это?

Ответ №1:

:to="#" интерпретируется как « # является именем переменной».

Попробуйте это.

<router-link v-else to="#"></router-link>

Или использовать <a> напрямую.

<a v-else href="#"></a>

Ответ №2:

Вы можете легко сделать это с помощью динамического компонента:

 <component
  :is="Post.urlslug amp;amp; Post.urlslug.length > 0 ? 'router-link' : 'a'" 
  :to="Post.urlslug amp;amp; Post.urlslug.length > 0 ? { path: Post.urlslug, name: 'PostView', params: {URLSlug: Post.urlslug} } : undefined"
  :href="Post.urlslug amp;amp; Post.urlslug.length > 0 ? undefined : '#'"
>
 

Комментарии:

1. это очень интересно, спасибо. но как мне поместить свой контент в этот компонент, например <img> , теги и т. Д

2. Вы разместите свой контент на месте 3 точек в <component>...</component>