【问题标题】:Vue.js show white space (line breaks)Vue.js 显示空格(换行符)
【发布时间】:2017-03-03 20:50:53
【问题描述】:

如何在 vue.js 中显示行间距。现在一切都在互相追逐......

已经试过了:

https://laracasts.com/discuss/channels/vue/vuejs-how-to-return-a-string-with-line-break-from-database

但似乎没有任何效果。现在尝试了 3 天 -_-。

我正在使用Vue.js 1.0 和browserify

非常感谢!

--编辑--

<template>
<div>
  <bar :title="title" />
  <div class="Row Center">
    <div class="Message Center" v-if="!loading">
      <div class="Message__body" v-if="messages">
        
        <div class="Message__item__body" v-for="message in messages" v-link="{ name: 'Message', params: { message: message.slug }}">
          <div class="Message__item__body_content">
            <p class="Message__title">{{ message.subject }}</p>
          </div>

          <div class="Message__item__body_content">
            <p>Reacties: {{ message.totalReactions }}</p>
          </div>

          <div class="Message__item__body_content">
            <p>Door: {{ message.user.name }} {{ message.user.last_name }}</p>
          </div>
        </div>

        <pagination :last-page="lastPage" :page="page" :name="Message" />
        <p v-if="noMessages" class="Collection__none">Er zijn momenteel geen berichten voor het topic {{ topic.name }}.</p>
      </div>
    </div>

    <div class="Loader" v-if="loading">
      <grid-loader :loading="loading" :color="color" :size="size" />
    </div>
  </div>

  <div class="Row center" v-if="!loading && page == 1 && topic">
    <div>
      <button type="submit" class="Btn Btn-main" v-link="{ name: 'NewMessage', params: { topic: topic.slug }}">Nieuw bericht</button>
    </div>
  </div>
</div>
</template>

<script>
import Bar              from '../Shared/Bar.vue';
import Pagination       from '../Shared/Pagination.vue';
import Topic            from '../../Services/Topic/TopicService';
import { GridLoader }   from 'vue-spinner/dist/vue-spinner.min.js';

export default {
  components: { Bar, Pagination, GridLoader },    
  data () {
    return {
      title: 'Berichten',
      messages: [],
      topic: null,
      noMessages: false,
      loading: false,
      color: "#002e5b",
      page: 1,
      lastPage: 1,
    }
  },
  route: {
    data ({ to }) {
      this.loading = true;
      this.page = to.query.page || 1;
      Topic.show(this.$route.params.topic, this.page)
           .then((data) => {
             this.topic = data.data.topic;
             if(!data.data.messages.data.length == 0) {
               this.messages = data.data.messages.data;
               this.lastPage = data.data.messages.last_page;
             } else {
               this.noMessages = true;
             }
             this.loading = false;
           });
    }
  }
}
</script>

当我这样做时:

<div class="Message__body__message">
  <p>{{ message.message.split("\n"); }}</p>
</div>

它只添加逗号。

--编辑--

【问题讨论】:

标签: javascript vue.js whitespace nl2br


【解决方案1】:

拆分消息时,会得到多个数据项,应使用v-for 处理。

但也请参阅 LMK 的答案,其中您不必拆分消息。

new Vue({
  el: '#app',
  data: {
    message: `this is a message
it is broken across
several lines
it looks like a poem`
  }
});
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.0.3/vue.min.js"></script>
<div id="app">
  <template v-for="line in message.split('\n')">{{line}}<br></template>
</div>

【讨论】:

  • 太棒了!效果很好。
  • 一件事 :) 我收到一个控制台错误:Error when evaluating expression "message.message.split('\n')": TypeError: Cannot read property 'split' of undefined
  • 你的message.message 总是一个字符串吗?该错误表明它至少在某些情况下是未定义的。
  • 看起来换行符导致了这个问题(因为它们是空的)。如果我添加多个换行符,它只使用一个换行符,它只显示一个!请查看我对数据库中导致问题的示例字符串的编辑。
  • 我已经编辑了我的示例以包含一些空白行。那不是问题。该错误表明它正在尝试将split 作为未定义值的方法调用。在某些时候,出于某种原因,message.message 不是字符串。
【解决方案2】:

将容器空白样式设置为前行,如:

<div style="white-space: pre-line;">{{textWithLineBreaks}}</div>

【讨论】:

  • 最佳答案就在这里。还可以考虑使用white-space: pre-wrap,因为它不会像pre-line 那样折叠顺序空白。
【解决方案3】:

在使用 Vue 渲染数据之前,您必须先转换数据。

const lines = stringWithLineBreaks.split('\n')
// then render the lines

如果你分享你正在使用的代码,我可以给出更具体的答案。

【讨论】:

  • 感谢您的回复。我在该显示的消息上方添加了一个组件(请参阅编辑)!
  • @Jamie 我的回答会像 Roy J 的一样——对我来说看起来不错
  • 您也可以使用计算属性,例如:lines() { return this.stringWithLineBreaks.split('\n'); }
猜你喜欢
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
  • 2014-07-30
  • 2015-08-03
相关资源
最近更新 更多