Условно отображать блоки, когда атрибут существует в моем объекте в Vue.js ?

#javascript #vue.js

#javascript #vue.js

Вопрос:

Моя структура объекта данных Vue выглядит следующим образом:

введите описание изображения здесь

Только когда в моей форме возникают ошибки, addPersonForm.errors объект заполняется следующим образом:

введите описание изображения здесь

Теперь на моей странице я пытаюсь отобразить условные теги ошибок и классы при addPersonForm.errors.name заполнении, выполнив следующее:

 <form action="{{ route('business.queue.add') }}" method="POST" id="manual-add">
    <div class="form-group" v-bind:class="{ 'has-error' : addPersonForm.errors }">
        <label for="add-person-name">Customer Name</label>
        <input type="text" class="form-control" name="name" id="add-person-name" v-model="addPersonForm.fields.name">
        <template v-if="addPersonForm.errors">
            <small class="form-text text-danger">@{{ addPersonForm.errors.name[0] }}</small>
        </template>
        <template v-else>
            <small id="emailHelp" class="form-text text-muted">Name will be displayed internally and to the customer</small>
        </template>

    </div>
  

При загрузке страницы vue выдает сообщение об ошибке Cannot read property 'name' of null . Я подозреваю, что это потому addPersonForm.errors , что пусто при загрузке.
Может кто-нибудь помочь мне в том, как правильно отображать условные теги, если name атрибут существует?

(Я знаю name , что атрибут является массивом, меня интересует только, есть ли ошибка, если, если есть, тогда отобразите первую).

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

1. К вашему сведению, вы можете поместить свой v-if / v-else непосредственно в <small> теги. Здесь нет необходимости использовать <template>

Ответ №1:

Этого v-if="addPersonForm.errors" должно быть достаточно, чтобы предотвратить возникновение ошибки. Вы уверены, что именно эта часть кода вызывает проблему?

В любом случае вы можете гарантировать, что не получите ошибку, используя необязательную цепочку

                                           <!-- note the "?" 👇 -->
<small class="form-text text-danger">@{{ addPersonForm.errors?.name[0] }}</small>
  

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

1. Привет, Фил, использования addPersonForm.errors будет недостаточно, так как мне нужно отображать шаблон ошибки только для этого конкретного поля. В более широком коде есть несколько полей, поэтому я специально указываю name атрибут (поле, к которому он относится). Однако использование вашей необязательной цепочки сработало.

2. В этом случае ваш вопрос не содержит достаточно информации, чтобы точно описать вашу проблему