我手动创建了 5 Min Quickstart Angular 2 遵循网络说明。 该应用程序与快速入门教程几乎相同。但我像这样导入了 .js 文件:
<script src="node_modules/es6-shim/es6-shim.min.js" />
<script src="node_modules/systemjs/dist/system-polyfills.js" />
<script src="node_modules/angular2/es6/dev/src/testing/shims_for_IE.js" />
<script src="node_modules/angular2/bundles/angular2-polyfills.js" />
<script src="node_modules/systemjs/dist/system.src.js" />
<script src="node_modules/rxjs/bundles/Rx.js" />
<script src="node_modules/angular2/bundles/angular2.dev.js" />
按如下方式更改它们,使应用程序正常工作:
<script src="node_modules/es6-shim/es6-shim.min.js"></script>
<script src="node_modules/systemjs/dist/system-polyfills.js"></script>
<script src="node_modules/angular2/es6/dev/src/testing/shims_for_IE.js></script>
<script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="node_modules/systemjs/dist/system.src.js"></script>
<script src="node_modules/rxjs/bundles/Rx.js"></script>
<script src="node_modules/angular2/bundles/angular2.dev.js"></script>
任何人都可以解释这种奇怪的(至少对我来说)行为吗?
最佳答案
在 HTML 中,脚本元素具有强制开始标记和强制结束标记。您不能省略结束标记。这就是 HTML 的设计方式。
如果您想要一些历史背景:
通常在 HTML 元素的开头:
- 包含内容并具有强制开始和结束标记
- 包含内容,但仅允许选择有限的子元素,因此结束标记是可选的,因为可以通过不允许作为子元素的元素的存在来推断。 (例如
<p>
) - 如上所述,但只能在非常有限的地方使用,因此 start 标记也是可选的(例如
<body>
) - 无法包含内容(例如
<img>
),因此结束标记为禁止
<script>
这个时候就被介绍了。它可以包含内容(内联脚本),因此需要开始和结束标记。
然后出现了 XHTML。在 XHTML 中<foo />
和<foo></foo>
意思完全一样。除非您需要一个 XML 解析器,并且浏览器不使用它们来解析 HTML(因为 HTML 不是 XML,所以它会出错)。您可以将文档设置为 application/xhtml+xml
这会触发 XML 解析器……不过,如果浏览器没有解析器,解析器就会崩溃……如果浏览器有解析器,你会得到一个蓝屏死机,但作者犯了一个微小的格式正确错误。
所以几乎所有人都放弃了 XHTML。
然后出现了 HTML 5,它被设计为向后兼容和向前兼容。
在 HTML 5 中 <foo />
与 <foo>
含义相同这样,对 XML 上瘾的人就可以继续输入/
。在图像开始标记的末尾。
在 HTML 5 中,有许多新元素,但旧的浏览器不了解它们,因此当引入它们时,所有这些元素的开始和结束标记都是强制性的,以便无法识别它们的浏览器(因此无法推断结束标签应该去哪里)不会在 DOM 上阻塞。
关于javascript - Angular 2 QuickStart <script/> 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36405451/