Angular7.2を使用したアプリ開発で次のような処理を実現しようとしています。
しかしrxjsの理解が十分ではないため非常に効率の悪そうな書き方になっています。
[開発環境]
rxjs 6.3.3
Angular CLI 7.2.3
Node 10.14.1
[処理の目的]
認証したユーザーのみに操作できる店舗情報編集ページを作成するため次の3つの処理を行っています。
1)現在ログイン中のユーザーIDを取得
2)URLセグメントをもとに店舗情報中の所有ユーザーIDを取得
3)1、2の結果をもとにユーザーIDを比較し所有者でない場合は編集不可にする
Typescript
1// 所有者かどうか判別するメソッド 2isOwned(storeId) { 3 4 // URLセグメントで取得した店舗IDが引数で渡されてくる 5 storeId; 6 7 // getCurrentUser()で現在のユーザー情報を取得 8 return this.userService.getCurrentUser().pipe( 9 10 mergeMap(user => { 11 // 取得したユーザーのIDを格納 12 let thisUid = user.uid; 13 // store IDをもとに店舗情報を取得 14 return this.db.collection('stores').doc(storeId).get().pipe( 15 16 mergeMap(rtn => { 17 // data()で店舗情報のオブジェクトを取得 18 let store = rtn.data(); 19 // カレントユーザーIDと店舗情報中のユーザーIDが同じか判断 20 let result = store.userId === thisUid; 21 // 結果をObsevableでリターン 22 return of(result); 23 }), 24 ); 25 }), 26 ); 27}
より適した書き方を教えていただけませんでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/01 16:06
2019/02/02 14:32