UPDATE:
这个问题专门讲了角2,现在是过时的。在发布时,没有办法检测它是否已加载到页面上。我还没有测试过其他版本,但是 Angular 8 现在有一种简单的方法来检测这一点,并且已经在下面的答案中指出了。
我正在尝试找出一种好的(最好是最好的)方法来检测 Angular 是否加载到页面上。
我看了这个问题:检测当前页面是否加载AngularJS的方法 https://stackoverflow.com/questions/13469466/ways-to-detect-whether-angularjs-is-loaded-in-the-current-page-or-not,但答案只是说明使用window.angular
,这是我尝试的第一件事(早在找到答案之前)。似乎 systemjs 导致 Angular 不在全局(窗口)范围内。
这是我的 html 文件的头部:
<script src="client/node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="client/node_modules/systemjs/dist/system.src.js"></script>
<script src="client/node_modules/rxjs/bundles/Rx.js"></script>
<script src="client/node_modules/angular2/bundles/angular2.dev.js"></script>
<link rel="stylesheet" href="client/styles/main.css"/>
<script>
System.config({
packages: {
client: {
format: 'register',
defaultExtension: 'js'
}
}
});
System.import('client/app')
.then(null, console.error.bind(console));
</script>
基于这个问题 https://stackoverflow.com/questions/34651079/when-should-i-concat-angular2-app-as-opposite-to-systemjs-approach,以及我对http2的理解,我没有看到不使用systemjs的真正原因。
显然,我可能是错的,systemjs 可能不是问题的原因;不管,window.angular
即使我正在查看我的 Angular 应用程序,也会返回未定义。
为了给您提供我们的用例,如果有帮助的话,我们正在通过一个初始化文件加载一个角度应用程序,该文件将在其他网站上使用(在大多数情况下我们不控制页面)。我们希望我们的初始化文件是能够检测页面中是否已包含其他依赖项中的 Angular2(以及正确的版本)。如果没有,我们会动态添加他们没有的内容来满足我们的需要。 (这种方法可能还存在一些其他问题,但我们会在到达那里后解决这些问题。)
Summary
- 我们需要检测页面上是否加载了 Angular,以及什么版本。
- 使用systemjs,
window.angular
返回未定义。
- Angular 应用程序运行良好,没有任何问题。
- 对于 http2,我们认为没有必要不使用 systemjs 加载 Angular,但我们并不反对在必要时进行更改。
我使用以下方法成功检测到 Angular2:
window.ng
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)