[英]How to Add Line Break in Vue JS v-for loop with CSS
如果單擊列表項,我需要按字母順序顯示名稱。 我為此使用了 Vue.js 和 Flex Grid。
我有一個名為 ListAll 的列表項,
單擊 ListAll 時,我必須顯示按 nameList 數組中的名稱分組的所有記錄。 我在顯示分組名稱時遇到問題。 我正在使用 Flex Grid 來顯示名稱。 顯示 A 的記錄后,B 的記錄應從新行開始,但 B 記錄不會換行。 如何使用 Vue js 或 ES6 或 CSS 語法在每組名稱后添加換行符?
我添加了這樣的換行符<div class="break"></div>
,但它並沒有打破記錄。
使用 flexbox 網格 CSS 類,記錄顯示在 4 列中,沒有換行符,
Apples Apricots Avocados Almond
Abiu Berry Bananas Boysenberries
Blueberries Breadfruit Carambola Cantaloupe
Cranberries Cherries Custard-Apple
預期結果:
Apples Apricots Avocados Almond
Abiu
Berry Bananas Boysenberries Blueberries
Breadfruit
Carambola Cantaloupe Cranberries Cherries
Custard-Apple
按字母順序排列的水果名稱.vue
<template>
<div id="wrapper">
<ul class="listitems">
<li><a
href="javascript:;" @click="userSelection('ListAll')">ListAll</a>
</li>
</ul>
<div class="grid-container">
<div v-for="(name, index) in nameList" :key="name" class="grid-item">
<ul v-for="letter in alphabets" :key="letter">
<li v-if="name.startsWith(letter)"><a>{{ name }}</a></li>
<div class="break"></div>
</ul>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'AlphabeticalFruitsName',
data() {
return {
nameList: [],
alphabets: ['A','B','C','D','E','F','G','H','I','J','K','L',
'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',],
names: [
{ name: 'Apples' },{ name: 'Apricots' },{ name: 'Avocados' },{ name: 'Apple Berry' },
{ name: 'Apple guava' },{ name: 'Almond' },{ name: 'Almond' },{ name: 'African Honeysuckle' },
{ name: 'African Plum' },{ name: 'Abiu' },{ name: 'Bananas' },{ name: 'Boysenberries' },
{ name: 'Blueberries' }, { name: 'Bing Cherry' },{ name: 'Breadfruit' },{ name: 'Cantaloupe' },
{ name: 'Carambola' },{ name: 'Cherimoya' },{ name: 'Cherries' },{ name: 'Cranberries' },
{ name: 'Custard-Apple' },{ name: 'Dates' }, { name: 'Honeysuckle' },{ name: 'Gooseberries' },
{ name: 'Grapefruit' },{ name: 'Grapes' },{ name: 'Guava' },{ name: 'Tangerine' },
{ name: 'Kiwi' },{ name: 'Lychee' },{ name: 'Strawberries' }, { name: 'Watermelon' }],
};
},
methods: {
userSelection(listItemName) {
this.nameList = [];
if (listItemName === 'ListAll') {
for (const value of this.names) {
this.nameList.push(value.name);
}
}
},
},
};
</script>
<style lang="scss" scoped>
.listitems {
display: flex;
justify-content: center;
}
ul {
list-style-type: none;
}
.grid-container {
display: grid;
grid-template-columns: auto auto auto auto;
padding: 10px;
}
.grid-item {
text-align: center;
}
.new-line:last-child {
content: '\a';
white-space: pre;
}
.break {
flex-basis: 100%;
height: 0;
}
</style>
這將檢查第一個之后的每個元素,以查看當前名稱和前一個名稱的第一個字母是否不匹配,如果不匹配,它將輸出一個br
。 我假設您的列表已經按字母順序排列了。
<div v-for="(name, index) in nameList" :key="name" class="grid-item">
<ul v-for="alphabet in alphabets" :key="alphabet">
//a BR or whatever element you need
<br v-if="i > 0 && nameList[i-1].name.charAt(0) !== name.charAt(0)"/>
<li v-if="name.startsWith(alphabet)"><a>{{ name }}</a></li>
<div class="break"></div>
</ul>
</div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.