Я пытаюсь отобразить значения текстового массива/объекта, но получаю вывод, пытаясь показать мне абзацы для каждого имени внутри массива/объекта.
Ссылка на текущий результат: текущий результат
Я новичок в vue.js, поэтому любые советы приветствуются!
<template>
<div class = "education center">
<div v-if = "object.timelines != null">
<template v-for = "(time,index) in object.timelines">
<p :key = "index">{{ time.schoolyear }}</p>
<div :key = "index" v-bind = "time" v-for = "(text,index) in time.text">
<p :key = "text">Degree: {{ text.degree }}</p>
<p>Institution: {{ text.institution }}</p>
<p>Where: {{text.where}}</p>
</div>
</template>
</div>
</div>
</template>
<script>
export default {
el: ".education",
data: function() {
return {
object: {
timelines: [
{
schoolyear: "2016 - 2017",
text: [
{ degree: "Applied Computer Science" },
{ institution: "Thomas More University of Applied Science" },
{ where: "Belgium, Geel" }
]
},
{
schoolyear: "2018 - 2019",
text: [
{ degree: "Business IT" },
{ institution: "HAMK University of Applied Science" },
{ where: "Finland, Hämeenlinna" }
]
}
]
}
};
}
};
</script>
Я хочу показать text.grade только один раз для schoolyear="2016 - 2017"
К сожалению, это не решает проблему. Также кажется огромным объемом работы, если вы работаете с большими массивами...
пожалуйста, перефразируйте вашу проблему, так как я неправильно вас понял
У вас есть контроль над объектом/временной шкалой?
я вижу, что ваш текстовый объект должен быть таким, как я здесь
или вы можете попробовать это



Мне не совсем понятно, чего вы хотите, но, возможно, вы хотите перебрать массив .text и для каждой записи в массиве отобразить как его ключ, так и его содержимое. Если это так, вы можете попробовать что-то вроде:
<p v-for = "(entry, index) in time.text" :key = "index">
{{Object.keys(entry)[0]}}: {{Object.values(entry)[0]}}
</p>
Если вам нужно беспокоиться о регистре заголовков для ключей, вы можете либо использовать вычисляемое свойство для преобразования массива, либо определить метод для преобразования каждой строки.
Вы можете использовать фильтр для заглавной буквы первой буквы ключей
Прежде всего, спасибо Буссаджра Брахим за предоставленный код, который решил мою проблему.
Я сначала перефразирую вопрос, а затем скопирую решение.
Вопрос: я хочу распечатать значения из массива внутри объекта javascript. В моем <div>tag в настоящее время печатается попытка распечатать text.institution для каждого элемента в массиве text.
в результате vue.js пытается показать <p>Institution: {{ text.institution }}</p>
для степень, учреждение и где. Предоставление браузеру вывода:
<p>Degree:</p>
<p>Institution: Thomas More University of Applied Science"</p>
<p>Where:</p>
для text.where это изменится на
<p>Degree:</p>
<p>Institution:</p>
<p>Where: Belgium, Geel</p>
Ответ: Еще раз огромное спасибо Буссаджра Брахим за демонстрацию решения.
/* eslint-disable vue/require-v-for-key */
<template>
<div class = "education center">
<div v-if = "object.timelines != null">
<template v-for = "(time,index) in object.timelines">
<p :key = "index">{{ time.schoolyear }}</p>
<div :key = "index" :set = "text = time.text">
<p>Degree: {{ text.degree }}</p>
<p>Institution: {{ text.institution }}</p>
<p>Where: {{text.where}}</p>
</div>
</template>
</div>
</div>
</template>
<script>
export default {
el: ".education",
data(){
return {
object: {
timelines: [
{
schoolyear: "2016 - 2017",
text: {
degree: "Applied Computer Science",
institution: "Thomas More University of Applied Science",
where: "Belgium, Geel"
}
},
{
schoolyear: "2018 - 2019",
text: {
degree: "Business IT",
institution: "HAMK University of Applied Science",
where: "Finland, Hämeenlinna"
}
}
]
}
};
}
};
</script>
Я изменил текстовый массив с квадратных скобок на фигурные скобки и вместо v-for= перешел на :set=.
попробуй
<p :key = "text" v-if = "time.schoolyear=='2016 - 2017'">Degree: {{ text.degree }}</p>