關於 Router 的 loadChildren

大家好,小弟有一個問題想請問一下。

一直以來,在做Module切分的時候,都會在router檔案當中寫下以下程式碼

   {
      path: 'pages',
      loadChildren: './post/post.module.ts#PostModule'
   }

剛好最近重安裝MacOS之後,安裝了最新版的Angular
卻發現上方的Code卻無法執行。
會一直跳出以下錯誤:

之後重整就會不斷跳出此錯誤訊息:

原本以為是自己的Code哪裡有問題,後來發現把 loadChildren 這行註解掉就沒錯了
代表問題在這行。

之後網路上找到以下寫法:

{
 path: 'pages',
 loadChildren: () => PostModule }

之後發現只要寫成Function就可以執行

但還是不懂為何原本的寫法會無法Work。

以下是我的Angular版本

路徑錯了,請使用絕對路徑,請從 app 那層寫起

  {
      path: 'pages',
      loadChildren: './app/post/post.module.ts#PostModule'
   }

你後面的寫法是屬非 LazyLoading 的寫法

{
 path: 'pages',
 loadChildren: () => PostModule }

我有使用過絕對路徑,但是依然錯誤
下圖是我的檔案結構以及錯誤訊息

你是看看用 tsc 跑看看真正的錯誤是什麼

不需要 .. 吧,直接是 app/post/post.module#PostModule

另外,我很好奇的是,有需要加 .ts 嗎?

我猜問題應該是你搞混了 Routing 的配置或者架構有些問題:

  1. 你想要載入 ‘./post/post.module.ts#PostModule’,
    但是目前從你的 code 似乎沒有設置 ./post/ 這個 path
  2. 你設置了 ‘./post/post.module.ts#PostModule’ 是 ‘pages’ 的子模組路由,
    但從 loadChildren 並沒有看到 pages 的 dir

你應該是想要設置:

   {
      path: 'post',
      loadChildren: './post/post.module.ts#PostModule'
   }

我是使用 Path Intellisense 的套件,然後發現如果要到那一層的話,就必須要..回去
不過目前看起來不是點點的問題,而是後面不需要加.ts
刪除掉.ts之後,就不會有這個問題了。

不過不管怎樣,現在能順利work真的很謝謝您。

1個讚

沒有哦,不是這個問題。
我現在這個架構目前應該沒有什麼太大問題才對。
後來發現把 .ts拿掉就好了

1個讚

其實… path 跟 loadChildren 裡的路徑並沒有一定的關聯…
也沒有 path 設 ‘post’,loadChildren 裡的路徑也要有 ‘post’ 的路徑或同樣的 module name 吧 @@