VueJS 3 / Vuex — как отображать данные из вложенного результата json

Дорогие,

Я боролся с этим часами, даже следуя базовым учебникам.

Я пытаюсь отобразить некоторые данные в Json в своем проекте Vue 3, когда данные находятся в массиве, с помощью цикла я получаю все, что мне нужно, но если их нет в массиве, я получаю сообщение об ошибке или данные склеиваются.

Я создал хранилище vuex следующим образом:

const region = {
    state: {
        region: {}
    },
    mutations: {
        SET_REGION(state, region) {
            state.region = region
        }
    },
    actions: {
        getAllRegions({ commit }) {
            axios.get("/api/regions/get")
                .then(response => {
                    commit('SET_REGION', response.data)
                })
        }
    },
    getters: {
        getAllRegions (state) {
            return state.region
        },
        getDelegue (state) {
          return state.region.delegue
        }
    }
};

Когда я вызываю эти данные на своей странице, я получаю следующий результат:

[
 {
  id: 3,
  name: "Occitanie",
  agents: [ ],
  delegue: null
 },
 {
  id: 2,
  name: "Ile de France",
  agents: [ ],
  delegue: null
 },
 {
  id: 4,
  name: "Hauts de France",
  agents: [ ],
  delegue: null
 },
 {
  id: 1,
  name: "Grand Est",
  agents: [
   {
    lastname: "DOE",
    firstname: "John",
    phone: "+331234567890",
    user: {
     email: "[email protected]"
    }
   }
  ],
  delegue: {
   lastname: "DURSLEY",
   firstname: "Jake",
   phone: "+3309987654321",
   user: {
    email: "[email protected]"
   }
  }
 }
]

Результат мне кажется хорошим. Теперь в моем Vue я хотел бы отобразить данные, и здесь у меня возникают проблемы с данными «DELEGUE».

<div v-for = "region in myFunctionToRetrieveJsonData">
    <p>Name: {{ region.name }}</p> // WORKING

    <p v-for = "agent in region.agents">
        {{ agent.lastname + ' ' + agent.firstname }}<br> // WORKING
        {{ agent.phone }}<br> // WORKING
        <span v-for = "email in agent.user">{{ email }}</span> // WORKING

        // THIS WAY
        Delegue: {{ agent.delegue.lastname + ' ' + agent.delegue.firstname }} // NOT WORKING

        // ALSO THIS WAY
        Delegue: {{ agent.delegue[0].lastname + ' ' + agent.delegue[0].firstname }} // NOT WORKING

        // THE OTHER WAY
        <p v-for = "delegue in region.delegue">
            Delegue: {{ delegue }} // DISPLAY: DURSLEYJake+3309987654321{"email":"[email protected]"} NOT GOOD
        </p>
    </p>
</div>

Я получаю эту ошибку: Uncaught (in promise) TypeError: Cannot read properties of null (reading 'lastname')

Я так понимаю, что для ПОЛЬЗОВАТЕЛЕЙ я могу сделать цикл v-for, но в случае с DELEGUE я не могу получить доступ сразу, или если я делаю цикл, у меня все данные не разделены и я могу' т работать с ним.

У вас есть идеи?

Большое спасибо за Вашу помощь.

Логан

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я вас правильно понял, взгляните на следующий фрагмент:

new Vue({
  el: '#demo',
  data() {
    return {
      items: [
        {id: 3, name: "Occitanie", agents: [ ], delegue: null},
        {id: 2, name: "Ile de France", agents: [ ], delegue: null},
        {id: 4, name: "Hauts de France", agents: [ ], delegue: null},
        {id: 1, name: "Grand Est", agents: [{lastname: "DOE", firstname: "John", phone: "+331234567890", user: {email: "[email protected]"}}], delegue: {lastname: "DURSLEY", firstname: "Jake", phone: "+3309987654321", user: {email: "[email protected]"}}}
      ]
    }
  }
})
<script src = "https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id = "demo">
  <div v-for = "region in items">
    <p>Name: {{ region.name }}</p>
    <p v-for = "agent in region.agents">
       {{ agent.lastname + ' ' + agent.firstname }}<br> 
       {{ agent.phone }}<br> 
       <span v-for = "email in agent.user">{{ email }}</span>
       Delegue: {{region.delegue?.lastname + ' ' + region.delegue?.firstname }}
    </p>
    
  </div>
</div>

Действительно, это моя проблема. У меня есть «Undefined» для моих данных делегирования. АГЕНТЫ находятся в массиве, поэтому цикл работает нормально. DELEGUE - это только один объект (не в массиве), но это странно, я не могу получить доступ с помощью "agent.delegue.lastname" или "agent.delegue['lastname']"

Logan 22.03.2022 23:02

@Logan, эй, приятель, посмотри еще раз, пожалуйста, я обновил свой ответ

Nikola Pavicevic 22.03.2022 23:08

БЛАГОДАРЮ ВАС !!!! Я не знал о вопросительном знаке !! у меня отлично работает. Большое тебе спасибо

Logan 22.03.2022 23:11

Добро пожаловать, дружище, ура :)

Nikola Pavicevic 22.03.2022 23:13

Другие вопросы по теме