如何在 Vue 模板内的 Moment.js 格式化程序上转义 HTML 字符串?

Posted

技术标签:

【中文标题】如何在 Vue 模板内的 Moment.js 格式化程序上转义 HTML 字符串?【英文标题】:How to escape HTML string on Moment.js formatter inside Vue template? 【发布时间】:2019-07-16 16:31:40 【问题描述】:

假设我有一个过滤为February 22nd 2019 的当前日期。我希望 nd 符号位于 <sup class="small"></sup> 标记内。问题是,我同时使用 Vue 和 Moment.js。

php 中,我可以这样做:

!! Carbon\Carbon::today()->format('F d<\s\up \c\l\a\s\s\="\s\m\a\l\l\"\>S</\s\up> Y') !!

但是如何在 javascript 和 Vue 中做到这一点?或者也许有更清洁的方法可以做到这一点?请看一下我的脚本..

<template>
    <div class="container">
        <!-- Textbox -->
        <div class="textbox text-white">
            <p>Realtime Flight Schedule</p>
            <div class="live-datetime">
                <h1> currentDate | filterCurrentDate  </h1>
                <digi-clock></digi-clock>
            </div>
        </div>
        <!-- Flight table -->
        <flight-table></flight-table>
    </div>
</template>
<script>
import moment from 'moment'
export default 
    filters: 
        filterCurrentDate(date) 
            return moment(date).format("MMMMM Do Y")
        
    ,
    data() 
        return 
            currentDate: new Date(),
        
    ,

</script>

【问题讨论】:

Vue display unescaped html的可能重复 【参考方案1】:

我相信您必须为此使用v-html。因此,您需要 filterCurrentDate 从 Moment 文本生成 HTML,然后使用 v-html 按原样呈现。

<h1 v-html="filterCurrentDateHTML(currentDate)"></h1>

请注意,我更改了过滤器的名称以明确表示它返回 HTML。

对于filterCurrentDateHTML,也许:

const m = moment(date);
const ord = m.format("Do");
return `$m.format("MMMMM") $ord.replace(/\D/g, '')<sup class="small">$ord.replace(/\d/g, '')</sup> $m.format('Y')`

【讨论】:

它在+ 签名后给了我unexpected token: $ord.replace(/\d/+, ''),先生 @DonnyPratama - 呵呵,+ 是不正确的。 :-) 那条线上还有另一个错误。我已经更新了答案,希望这些是那里仅有的两个错误。 谢谢您,先生,它有效,我只想通知您,在$m.format('Y') 之后还有一个额外的) 也会产生错误 好吧,我不能再在v-html 上使用过滤器,所以我将它移到methods 属性并像&lt;h1 v-html="filterCurrentDateHTML(currentDate)"&gt;&lt;/h1&gt; 一样使用它。是的,它可以在没有 span 的情况下工作 @Styx - 是的,我考虑过这一点,然后决定允许具有不同长度序数的语言环境。 (但不允许数字与非数字的东西不起作用的语言环境,所以......可能不一致。:-))

以上是关于如何在 Vue 模板内的 Moment.js 格式化程序上转义 HTML 字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vuetify 中设置 moment.js?

vue 中timestamp的用法

如何使用 npm 在 ES6 中导入 moment.js?

Vue里用moment.js

模拟 es6 模块返回工厂函数(moment.js)

moment.js常用总结