はじめに
こんな感じでjson
にちょっと長めのテキストが入ることってよくありますよね?
{
"id": 1,
"title": "『私』のバランス",
"img": "option1.svg",
"text": "「仕事は自分を犠牲にしてでも・・・!」そんな風に考えているあなたへ。このワークに一緒に取り組んでみませんか?",
"modalImg": "sample.png",
"link": "training"
},
<template>
<div
class="option"
v-for="(option, i) of options"
:key="i"
>
<div class="option-img">
<img
:src="require(`@/assets/images/options/${option.img}`)"
/>
</div>
<p class="option-text">{{ option.text }}</p>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import optionsData from '../../assets/json/optionsData.json';
export default Vue.extend({
data() {
return {
options: optionsData
};
}
});
</script>
このtext
を任意の場所で改行したいな〜っと思い、調べてみました。
👆を参考に\\n
もしくは\n
を入れてみました。
{
"id": 1,
"title": "『私』のバランス",
"img": "option1.svg",
"text": "「仕事は自分を犠牲にしてでも・・・!」\nそんな風に考えているあなたへ。\nこのワークに一緒に取り組んでみませんか?",
"modalImg": "sample.png",
"link": "training"
},
しかし!!!改行さない!!!
追加でcssが必要でした
<template>
<div
class="option"
v-for="(option, i) of options"
:key="i"
>
<div class="option-img">
<img
:src="require(`@/assets/images/options/${option.img}`)"
/>
</div>
<p class="option-text">{{ option.text }}</p>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import optionsData from '../../assets/json/optionsData.json';
export default Vue.extend({
data() {
return {
options: optionsData
};
}
});
</script>
<style scoped lang="scss">
.option-text {
white-space: pre-wrap; // 追加!!!
}
</style>
これで改行されるようになりました!!!
white-space: pre;
だと改行コード\n
を入れた箇所以外では改行されなくなるので要注意!
追記 v-text
を使いましょう
<div class="option-text" v-text="optionText"></div>
Mustache構文{{}}を使用せず、v-text属性を使用しているのは、以下に理由によるものです。
タグ間のインデントや改行も出力されてしまう。
(ESLintを導入している場合)タグ間をすべて続けて書いた場合、1行が長すぎるため改行して記述するようwarningが吐かれる場合がある。
参考