當(dāng)訪問如下 url 時(shí), http://localhost:4200/powertools-spa/en/USD/jerryproduct/3755211/PSR%2010.8%20LI 我們能看到如下的 OCC API 調(diào)用: https://:9002/occ/v2/powertools-spa/cms/pages?pageType=ProductPage&code=3755211&lang=en&curr=USD 這個(gè) OCC API 是 cms-page.connector.ts 觸發(fā)的。Connector 肯定是 effect 調(diào)用的,調(diào)用時(shí),pageContext 已經(jīng)解析完畢了。這個(gè) type 為 ProductPage 是如何解析的? 加上打印語句: 果然是被 page effect 調(diào)用的: 檢查是誰拋出的 CmsActions.LoadCmsPageData 即可。 在 page action 的構(gòu)造函數(shù)里打斷點(diǎn),就知道誰去 dispatch 的這個(gè) action 了: 看樣子我們要在 cms.service.ts 的 hasPage 方法里繼續(xù)設(shè)置斷點(diǎn)了: 這里找到了源頭:我們之前的文章已經(jīng)介紹過,把 url 粘貼到瀏覽器地址欄之后,會(huì)觸發(fā) Angular 路由器框架 Router 的檢測邏輯,如果 url 的片段確實(shí)是 RouterModule.forChild 里傳入的 routes 數(shù)組的片段時(shí),說明路由匹配成功,此時(shí)需要執(zhí)行該路由的 canActivate 鉤子,只有鉤子返回 true,才能真正激活這個(gè)路由,加載 route 數(shù)據(jù)結(jié)構(gòu)里維護(hù)的 Component 實(shí)例。 上圖解釋了本文標(biāo)題的疑問。 |
|