一、angular2 ng build --prod 报错:Module not found: Error: Can't resolve './$$_gendir/app/app.module.ngfactory'
- 原因: angular-cli 版本低。
- 解决办法一:
- 1、 rm -rf node_modules/
- 2、 npm install --save-dev @angular/cli@latest
- 3、 npm install
- 解决办法二:
- 配置中--prod 改为 --env=prod
二、npm start 报错:Error: Cannot find module 'lodash'
- 1、 rm -rf node_modules/
- 2、 npm install
三、Can't bind to 'ngModel' since it isn't a known property of 'input'.
- 1、在此组件所在的module中引入FormsModule:
- 2、在此组件所在的module中添加:
四、Can't have multiple template bindings on one element. Use only one attribute named 'template' or prefixed with * ("
<li class="item chkitem" *ngFor="let dItem of deptList" [ERROR ->]*ngIf="!isCopy">
- 指令ngFor和ngIf不要写在同一个标签上。
五、有时候引入第三方组件时有些样式无法修改,此时可以试试以下两步:
- 1、引入ViewEncapsulation
- 2、添加encapsulation: ViewEncapsulation.None
六、ng2生命周期钩子不能写成箭头函数的形式,否则不响应。
七、关于html标签原有属性的赋值有两种形式:
- 1、通常赋常量值
注意:红框内的“selectAll”是常量值。
- 2、给属性赋变量值,有以下两种形式
- ①、给变量值套上‘{{}}’,如下图红框中所示:
- ②、给属性加上‘[]’,如下图红框中所示:
注意:红框中的dItem.indexId是变量值。
八、[(ngModel)]属性影响input默认选中
- 1、一般情况下,我们默认让某个input(radio或checkbox)选中时,只需在input中加checked即可,如下图:
- 2、下面这种情况下checked是不起作用的,即input默认是未选中的,解决办法把ngModel属性删掉就可以了:
九、打包前运行正常,打包后用eclipse起项目运行报错:AllComponent_Host.html:1 ERROR TypeError: Cannot read property 'parentDepId' of undefined。
- 从报错信息我们可以看到是因为有属性未定义,但打包前的代码运行是正常的,这是什么原因呢?
- 这个情况比较特殊,先看导致错误前后的代码:
-
注意:
- 1、上面两图代码的区别,只是slice方法的参数不同而已;
- 2、第一张图的代码在开发环境是运行正常的,打包后在eclipse中起项目是错误的;
- 3、问题原因:两种环境下window.location.pathname的值不同,所以截取的字符串出错了,更正后的代码即可解决这个问题。
结论:这个问题如果在开发时遇到并不难解决,但难的是构建后和构建前不一致时的定位。
十、cnpm代替npm安装包后npm run build:prod容易出现的问题(npm和cnpm混用导致的)(mac中使用cnpm无问题,和系统也有关系):
at Error (native)
at Object.fs.openSync (fs.js:640:18)
at Object.fs.readFileSync (fs.js:508:33)
- 解决办法:
- 1、卸载node_modules后用npm重装(前提是npm速度还可以);
- 2、卸载node_modules后修改(降低)ng的版本,再次安装(用cnpm),如下图
注意:项目中的node_modules文件夹中的代码如果混用了npm install和cnpm install时会出现类似的问题!
建议:在npm install之前把node和ng的全局版本都更新到最新,本地ng版本也更新到最新版本;