天天看點

angular2+常見的錯誤應用彙總

一、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:
angular2+常見的錯誤應用彙總

1

  • 2、在此元件所在的module中添加:
angular2+常見的錯誤應用彙總

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
angular2+常見的錯誤應用彙總

1

  • 2、添加encapsulation: ViewEncapsulation.None
angular2+常見的錯誤應用彙總

2

六、ng2生命周期鈎子不能寫成箭頭函數的形式,否則不響應。

七、關于html标簽原有屬性的指派有兩種形式:

  • 1、通常賦常量值
angular2+常見的錯誤應用彙總

正常形式

注意:紅框内的“selectAll”是常量值。

  • 2、給屬性賦變量值,有以下兩種形式
    • ①、給變量值套上‘{{}}’,如下圖紅框中所示:
angular2+常見的錯誤應用彙總

變量形式一

  • ②、給屬性加上‘[]’,如下圖紅框中所示:
angular2+常見的錯誤應用彙總

變量形式二

注意:紅框中的dItem.indexId是變量值。

八、[(ngModel)]屬性影響input預設選中

  • 1、一般情況下,我們預設讓某個input(radio或checkbox)選中時,隻需在input中加checked即可,如下圖:
angular2+常見的錯誤應用彙總

通常情況下

  • 2、下面這種情況下checked是不起作用的,即input預設是未選中的,解決辦法把ngModel屬性删掉就可以了:
angular2+常見的錯誤應用彙總

錯誤形式

九、打包前運作正常,打包後用eclipse起項目運作報錯:AllComponent_Host.html:1 ERROR TypeError: Cannot read property 'parentDepId' of undefined。

  • 從報錯資訊我們可以看到是因為有屬性未定義,但打包前的代碼運作是正常的,這是什麼原因呢?
  • 這個情況比較特殊,先看導緻錯誤前後的代碼:
angular2+常見的錯誤應用彙總

錯誤代碼

angular2+常見的錯誤應用彙總

更正後的代碼

  • 注意:
    • 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),如下圖
angular2+常見的錯誤應用彙總

我在目前項目用的版本

注意:項目中的node_modules檔案夾中的代碼如果混用了npm install和cnpm install時會出現類似的問題!

建議:在npm install之前把node和ng的全局版本都更新到最新,本地ng版本也更新到最新版本;

angular2+常見的錯誤應用彙總

想要整理更多的碎片知識,掃碼關注下面的公衆号,讓我們在哪裡接着唠!

angular2+常見的錯誤應用彙總