AOT:错误:Uncaught(承诺):TypeError:无法读取未定义的属性'$'

问题描述:

我正尝试在AOT生产版本中发布一个Angular4前端项目。经过长时间的角色cli成功构建AOT模式后,我终于可以发布前面发布的“build prod - not false”前端,并查看AOT和JIT之间的区别。不幸的是,当web应用程序在浏览器中启动时,我遇到了错误。

Error: Uncaught (in promise): TypeError: Cannot read property '$' of undefined 

该错误似乎与jQuery(因为$)有关,我在app.module.ts中有。

'import * as $ from 'jquery';' 

但我意识到,这是不是jQuery的都怎么我仍然得到,即使我完全在我的应用程序删除jQuery的引用,并使用相同的错误有关。

注:我只收到此错误,如果前端与“刺--aot真”,而不是当应用程序被内置“刺--aot假”

更新建:我还意识到我在项目中使用$符号具有低于定义的SignalR服务。

export class SignalrWindow extends Window { 
    $: any; 
} 

不知道发生了什么事。任何帮助都是极好的!

+2

并且代码看起来像...? – Dekel

+0

您是否安装jquery并键入jquery –

+0

@sachilaranawaka:是的,我已经完成了npm安装jquery --save和npm install @ types/jquery --save – dmc

创建一个新的定义文件(例如:definitions.d.ts),并添加以下代码:

interface SignalrWindow extends Window { 
    $: any; 
} 

declare var window: SignalrWindow ; 
+0

时,我得到了“无法找到名字$”的信息是的,这对我很有用! – dmc

一种方式使用jquery而不是安装依赖项是将jquery脚本添加到您的index.html文件并创建一个define变量。

的index.html

<script type="text/javascript" src="jquery-2.1.1.min.js"></script> 

app.module.ts

declare var $: any; 

这种方法的缺点是,智能感知不会与工作定义变量。

+0

当我按照你的建议做了 – dmc