|
@@ -249,6 +249,31 @@ const encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#10|#9);/g
|
|
|
|
|
|
所以这里的常量 `decodingMap` 以及两个正则 `encodedAttr` 和 `encodedAttrWithNewLines` 的作用就是用来完成对 `html` 实体进行解码的。
|
|
|
|
|
|
+再往下是这样一段代码:
|
|
|
+
|
|
|
+```js
|
|
|
+// #5992
|
|
|
+const isIgnoreNewlineTag = makeMap('pre,textarea', true)
|
|
|
+const shouldIgnoreFirstNewline = (tag, html) => tag && isIgnoreNewlineTag(tag) && html[0] === '\n'
|
|
|
+```
|
|
|
+
|
|
|
+定义了两个常量,其中 `isIgnoreNewlineTag` 是一个通过 `makeMap` 函数生成的函数,用来检测给定的标签是否是 `<pre>` 标签或者 `<textarea>` 标签。这个函数被用在了 `shouldIgnoreFirstNewline` 函数里,`shouldIgnoreFirstNewline` 函数的作用是用来检测是否应该忽略元素内容的第一个换行符。什么意思呢?大家注意这两段代码上方的注释:`// #5992`,感兴趣的同学可以去 `vue` 的 `issue` 中搜一下,大家就会发现,这两句代码的作用是用来解决一个问题,该问题是由于历史原因造成的,即一些元素会受到额外的限制,比如 `<pre>` 标签和 `<textarea>` 会忽略其内容的第一个换行符,所以下面这段代码是等价的:
|
|
|
+
|
|
|
+```html
|
|
|
+<pre>内容</pre>
|
|
|
+```
|
|
|
+
|
|
|
+等价于:
|
|
|
+
|
|
|
+```html
|
|
|
+<pre>
|
|
|
+内容</pre>
|
|
|
+```
|
|
|
+
|
|
|
+以上是浏览器的行为,所以 `Vue` 的编译器也要实现这个行为,否则就会出现 `issue #5992` 或者其他不可预期的问题。
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
|