一、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/[email protected]
- 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:
1
- 2、在此元件所在的module中添加:
2
四、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
1
- 2、添加encapsulation: ViewEncapsulation.None
2
六、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版本也更新到最新版本;
想要整理更多的碎片知識,掃碼關注下面的公衆号,讓我們在哪裡接着唠!