angularメモ帳

angular始めました。
動かすために調べたことをメモしています。

1131 views

angularでindexedDBを使う場合、素のinedexedDBを使っても良いのだが、ラッパーがあるのでラッパーを使ったほうが楽ちん。

ラッパーは、ngx-indexed-dbを使う。

まずはモジュールのインストール。

  1. npm install ngx-indexed-db

次にapp.module.tsに以下を記述する。

  1. import { NgxIndexedDBModule } from 'ngx-indexed-db';
  2. const dbConfig: DBConfig = {
  3. name: 'MyDb',
  4. version: 1,
  5. objectStoresMeta: [{
  6. store: 'people',
  7. storeConfig: { keyPath: 'id', autoIncrement: true },
  8. storeSchema: [
  9. { name: 'name', keypath: 'name', options: { unique: false } },
  10. { name: 'email', keypath: 'email', options: { unique: false } }
  11. ]
  12. }]
  13. };
  14. @NgModule({
  15. ...
  16. imports: [
  17. ...
  18. NgxIndexedDBModule.forRoot(dbConfig)
  19. ],
  20. ...
  21. })

これで準備完了。

あとは、DBに書き込みたいコンポーネントのファイルに以下を記述する。

  1. import { NgxIndexedDBService } from 'ngx-indexed-db';
  2. export class BlasDownloadService {
  3. constructor(private dbService: NgxIndexedDBService) {
  4. }
  5. downLoad(token:string, projectId:number) {
  6. this.dbService
  7. .add('people', {
  8. name: `Bruce Wayne`,
  9. email: `bruce@wayne.com`,
  10. })
  11. .subscribe((key) => {
  12. console.log('key: ', key);
  13. });
  14. }

これでindexedDBにレコードが書ける。簡単。

ここまではチュートリアルどおり。

問題は以下のdbConfig。

  1. const dbConfig: DBConfig = {
  2. name: 'MyDb',
  3. version: 1,
  4. objectStoresMeta: [{
  5. store: 'people',
  6. storeConfig: { keyPath: 'id', autoIncrement: true },
  7. storeSchema: [
  8. { name: 'name', keypath: 'name', options: { unique: false } },
  9. { name: 'email', keypath: 'email', options: { unique: false } }
  10. ]
  11. }]
  12. };

これがそれぞれ何をやっているのかという問題。
恐らくDBの定義をやっているんだろなというのはわかるけど、RDBに慣れている人からすると、ちょっと何言ってるのかわからない感じがある。
これをRDBと関連付けて解説してみる。

まず、2行目の

  1. name: 'MyDb',

これはデータベースの名前。RDBでも同じ。

3行目のversionもそのまま、DBのバージョンなので解説不要。

問題は4行目から。4行目はstoreの定義をするよということだけど、storeとはRDBで言うところのテーブル名と同じ。
以下はpeopleテーブルを作るよと言っているのと同じ。

  1. store: 'people',

6行目。storeConfigはstoreの定義。RDBでいうところの制約を定義するイメージ。
keyPathはテーブルのカラム名のこと。idというはautoincrementですよと言っている。

8,9行目のstoreSchema。これがわかりにくい。
nameとkeypathの違いがよくわからない。
まず、keyPathはRDBの列の名前と同じと思ってよい。
nameもほぼほぼ列の名前と同じ。
だったら、なんで2個も同じ名前を定義するんだ?
ということだけど、どうやら
データを書き込むときはkeypathを指定して書き込む。
検索するときはnameに指定した名前を使って検索するっぽい。
RDBでもインデックスを付けて検索を速くするけど、indexedDBも同じことをやる。
SQLのときはあんまりインデックス名を意識しないけど、indexedDBでは意識するということかもしれない。
まだ始めたばかりなので、このあたりもう少し確信が得られれば改定します。
とりあえず、ココを見ればいいという話。
https://base64.work/so/javascript/1457479

Page 34 of 38.

前のページ 次のページ



[添付ファイル]

1.angular flex layoutについて.docx  


お問い合わせ

プロフィール

すぺぺぺ

自己紹介

本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。

サイト/ブログ

https://www.osumoi-stdio.com/novel/

ツイッター

@darkimpact0626