8. Building an Enterprise Portal Using Nx Monorepo Tools and NgRx
8章のngrxを写経して不明点をまとめた
設定
・assetsの置き場
project.jsonのassetsに記載すればlocalhost経由でアクセスできるようになる
"assets": [ { "glob": "**/*", "input": "apps/tour/public" }, "apps/tour/src/assets"
Angular系
・componentの読み込み
loadComponentでComponentを読み込む
export const appRoutes: Route[] = [ { path: 'admin', loadComponent: () => import('@packt/admin').then(m => m.AdminComponent) },
・navigation設定
npx nx g @angular/material:navigation --project=visitor --skip-import --verbose
・import
importで全部まとめて別名をつける
import * as PoiActions from './lib/poi.actions'; import * as PoiSelectors from './lib/poi.selectors'; import * as PoiFeature from './lib/poi.reducer';
・ライブラリプロジェクトを外から参照する方法
index.tsにimportしたり、exportでクラスを作ったりする
ライブラリを以下の方法でimportする
import { providePoiAppStore } from '@packt/poi';
NgRx
・ngrxの追加
stand alone modeのときは以下
nx generate @nx/angular:ngrx app --root --no--interactive --parent=apps/tour/src/app/app.config.ts
・各種ファイルの自動生成
nx generate effect poi --project=poi --flat
・entity
EntityStateはidsの型になってる
EntityAdapterはコレクションの更新等
https://www.isoroot.jp/blog/2254/
・reduxのdebug
chromeの拡張機能のRedux DevToolsを入れる
コード上に以下をmain.tsのproviderに書く
provideStoreDevtools({ maxAge: 25, logOnly: false })
・reduxの初期設定
libraryの中のindex.tsで定義する
それをmain.tsで読み込むことで初期化される
main.tsで読み込まないとreduxが動かないので注意
export const appConfig: ApplicationConfig = { providers: [ providePoiAppStore, ], };
・reduxの各種設定
featureの場合はprovideStoreのキーとselectのキーを合わせる必要がある
//初期化 export const providePoiAppStore = [ provideStore({ [POI_FEATURE_KEY]: PoiReducer }), provideEffects([PoiEffects]), ]; //selector export const selectPoiState = createFeatureSelector<PoiState>(POI_FEATURE_KEY); export const selectAllPoi = createSelector(selectPoiState, (state: PoiState) => { console.log('State in selectAllPoi:', state); return selectAll(state) } //reducer export const PoiReducer = createReducer( initialState, //effect export class PoiEffects { init$: Observable<Action> constructor(private actions$: Actions, private poiService: PoiService) { this.init$ = createEffect(() => //view export class PoiListComponent implements OnInit { pois$: Observable<PoiEntity[]> | undefined; constructor(private store: Store) { this.pois$ = this.store.select(PoiSelectors.selectAllPoi);
・undefinedを許容するObservablie
poi$: Observable<PoiEntity | undefined>;
その他
・async pipe
CommonModuleをimportする
関連記事:
- Angular Projectsの2章のBasic Layoutを読んだ
- Effective Angularの第2章のRouterまでのまとめ
- Effective Angularの第2章の後半のまとめ