【问题标题】:How to add condition to HTML code in Vue.js?如何在 Vue.js 中为 HTML 代码添加条件?
【发布时间】:2016-07-10 12:53:16
【问题描述】:

我有以下模板代码:

<template v-for="(index, message) in messages">
  {literal}
  <div class="message_block {{message.message_type}}" v-if="message.message_type">
    <div class="message">
      {{message.message}}
    </div>
  </div>
  {/literal}
</template>

我要做的是显示一行 - &lt;div class="message_block"...,如果 message.message_type 不等于 null,或者不是 undefined

这是我得到的数据:

var demo = new Vue({
  el: '#testblock',
  data: {
    messages: [
      { message: 'Foo', message_type: "left" },
      { message: 'Bar', message_type: null }
    ]
  }
})

如果message_type 不等于null,我正在尝试添加包装器&lt;div class="message_block"&gt;

【问题讨论】:

  • 对我来说看起来不错,是什么不工作?
  • 为我工作:jsfiddle.net/9c3tdrpj
  • 你在这方面有什么进展吗? @think123
  • @LinusBorg 不,无论message_type 的值如何,我都希望“栏”显示,只要message_typenull,我不想要包装器&lt;div&gt;围绕它。

标签: javascript html handlebars.js vue.js


【解决方案1】:

根据您上面的评论:

@LinusBorg 不,无论 message_type 的值如何,我都希望“栏”显示,只是如果 message_type 为空,我不想要围绕它的包装器。

除了复制内部 div 之外别无他法。

<template v-for="(index, message) in messages">
  {literal}
  <div class="message_block {{message.message_type}}" v-if="message.message_type">
    <div class="message">
      {{message.message}}
    </div>
  </div>

  <div v-if="!message.message_type" class="message">
    {{message.message}}
  </div>
  {/literal}
</template>

如果您不想复制它,您可以将其定义为一个小组件以重复使用它,或者使用partial

【讨论】:

  • 哇哦,好吧...只是因为我还没有深入研究这个组件的开发,你有什么建议我可以使用的另一个 JavaScript 框架,它将提供更好的模板功能,是否适合我对聊天消息组件的需求?
  • 我不知道有一个框架(或模板系统)会以不同/更好的方式处理这个问题,不,主要是由于 HTML 的结构和 DOM 的创建方式。车把、玉石等也是这样工作的。也许在 React 渲染函数中你会有更多的灵活性,但这不再是模板引擎,它基本上是纯 Javascript 来构建 DOM。不过我不认为这是一个大问题。
  • 是的,现在我考虑一下就说得通了……直接来自使用 Smarty 我想我希望功能是相似的,只是输出任何东西。我现在使用我自己的处理系统,因为它让我对我的代码有更大的灵活性。
猜你喜欢
  • 1970-01-01
  • 2017-08-17
  • 1970-01-01
  • 2016-11-17
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
  • 2017-08-24
相关资源
最近更新 更多