javascript - Angular 2 QuickStart <script/> 失败

标签 javascript html angular

我手动创建了 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 &lt;script/> 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36405451/

相关文章:

javascript - getElementById 在文本框中不起作用?

javascript - 两列全高布局扩展以包含内容

angular - Ionic2,将 NavController 注入(inject) Injectable Service

html - Div 在另一个 div 之上

angular - 使用 routerLink Angular 传递不可见或隐藏的参数

iframe - iframe 内的 Angular 2 触发插值

javascript - 使用 phantomjs\chrome 处理 Protractor 事件

javascript - 如何在 select mui 中显示从 api 获取的数据

数组属性的 JavaScript getter 方法

javascript - 谷歌图表图形多行文本标签