вызов сервиса внутри файла состояния Ngxs - PullRequest
0 голосов
/ 07 января 2019

Я хочу сделать сервисный звонок внутри моего auth.state.ts. Вот мой файл состояния:

import { EmitterAction, Receiver } from '@ngxs-labs/emitter';
import { Selector, State, StateContext } from '@ngxs/store';
import { TokenResponse, User } from '../models';
import { UserDetailsService } from '../profile/user-profile/user-details.service';

// actions
export class GetUser {
  constructor(private userDetailsService: UserDetailsService) {}
  static readonly type = '[Auth] GetUser';
}
interface AuthStateModel {
  user?: User;
  tokenResponse?: TokenResponse;
}

@State<AuthStateModel>({
  name: 'auth'
})
export class AuthState {
  constructor(private userDetailsService: UserDetailsService) {}

  @Selector()
  static user(state: AuthStateModel) {
    return state.user;
  }

 @Action(GetUser)
     getUser(ctx: StateContext<AuthStateModel>, action: GetUser, userDetailsService: UserDetailsService) {
        console.log('get user');
        // console.log(userDetailsService.userDetailsUrl);

    return userDetailsService
      .getUserInfo()
      .pipe(take(1))
      .subscribe(
        (res: any) => {
          console.log(res.message);
          ctx.patchState({ user: res.message });
        },
        (err: HttpErrorResponse) => {
          console.log(err);
        }
      );
}
}

Но здесь он не получит мои userDetailsService, а также его методы и свойства. *** Примечание *

Этот auth.state.ts файл импортирован в мой app.module.ts, а также userDetailsService.ts также включен в раздел provide app.module.ts.

Пожалуйста, помогите мне с этим, спасибо заранее

1 Ответ

0 голосов
/ 09 января 2019

Как упомянуто в комментарии @Zdenek - вам нужно удалить это из подписи getUser, так как она уже введена в ваше состояние, чтобы вы могли получить к ней доступ через this.userServiceDetails.

Кроме того, когда вы вызываете его, предпочтительным шаблоном является использование pipe и tap для обработки результата, а не прямая подписка в функции getUser. Используя pipe / tap для формулирования наблюдаемого, затем верните его в NGXS, чтобы инфраструктура позаботилась о подписке,

...