Vue: 使用`whitespace:condense`,所有&nbsps;甚至有意义的都将转换为空格

创建于 2020-01-29  ·  5评论  ·  资料来源: vuejs/vue

2.6.11

复制链接

https://gist.github.com/aimozg/c073eea5a55062e3dcd8f887a8567807

重现步骤

在Node中运行example.js。

替代步骤/详细说明:

  1. 使用whitespace: 'condense'设置Vue模板编译器。 (这是vue-cli的默认设置)。
  2. 具有&nbsp;实体的渲染模板,例如<p>a&nbsp;b</p>
  3. 检查模板的实际不间断空格字符

期望什么?

&nbsp;实体呈现为不间断的空格字符; example.js输出应包含

---- whitespace: condense
// code
NBSP FOUND

实际发生了什么?

&nbsp;实体呈现为普通空间,example.js输出包含

---- whitespace: condense
// code
NBSP NOT FOUND

此编译器代码剥离了空格:

if (!inPre && whitespaceOption === 'condense') {
  // condense consecutive whitespaces into single space
  text = text.replace(whitespaceRE, ' ')
}

"&nbsp;" s早先由实体解码器替换为"\xA0" s。

相关问题是https://github.com/vuejs/vue/issues/10485

建议

较窄的whiteRERE正则表达式,例如/[ \t\r\n]+/g

bug compiler has PR

最有用的评论

我们一般不应该碰触不间断的空间吗? 如果我在模板中使用一个,这就是我个人的期望。 它还可以解决您提到的问题

所有5条评论

我们一般不应该碰触不间断的空间吗? 如果我在模板中使用一个,这就是我个人的期望。 它还可以解决您提到的问题

使用空格:“ condense”设置Vue模板编译器。 (vue-cli的默认设置)

等等,我很困惑。 condense真的是默认值吗? 我看到许多声称preserve实际上是默认值的东西。

我一直在努力弄清为什么我所有的牢不可破的空间都无法正常工作。 我本打算尝试强制保留,但随后看到:

埃文(Evan)说默认值为preserve https://github.com/vuejs/vue/issues/9208#issuecomment -450012518

和回显该语句的编译器选项文档https://github.com/vuejs/vue/tree/dev/packages/vue-template-compiler#options

现在看到@aimozgcondense实际上是默认值之后,我继续手动设置preserve并确定! 一切恢复正常!

文档/实现错误吗?

不论哪种方式,为什么冷凝都会消除nbsp? 非常意外的行为。 我同意不应该感动他们。

Vue核心中保留了空格,以确保向后兼容,而在最新版本的Vue CLI中,我们默认将其配置为condense

与转义的标签&#9;

很难显示代码

等待此合并。
当前解决方法
采用

{{'\xa0'}}

代替

&nbsp;
此页面是否有帮助?
0 / 5 - 0 等级