Как исправить ошибку дальше не функция в angular - PullRequest
0 голосов
/ 16 марта 2020

вот код:

async ngOnInit() {
    @Select(UserPageState.get('collection')) users$: BehaviorSubject<Array<Partial<User>>>;


    const USER = this.creds.credentials['id'];
    this.users$.subscribe(param => this.users$.next(param.filter(x => x.id !== USER)));

    await this.store.dispatch(new UserPageList({ start: 1, length: this.pageSize })).toPromise();
    }

ОШИБКА

ERROR TypeError: _this.users$.next is not a function
    at SafeSubscriber._next

user.ts

  username: string;
  password?: string;
  token: string;
  avatar: string;
  firstName: string;
  lastName: string;
  email: string;
  department: string;
  position: string;
  role: string;
  status: string;
  enabled: boolean;
  groups: Array<Group>;
  location: Array<Sbu>;

каждый раз, когда я запускаю приложение, ошибка всегда следующая не является функцией. и я попытался изменить поведение объекта на BehaviorSubject (Array>);

, и весь мой код - ошибка.

Ответы [ 2 ]

2 голосов
/ 16 марта 2020

Кажется, вы используете библиотеку Ngxs для управления состоянием с декоратором Select для извлечения фрагмента состояния.

@Select возвращает простое observable, и не BehaviorSubject. Ваша декларация должна быть:

@Select(UserPageState.get('collection')) users$: Observable<User[]>;

или с Partial<User>[], но у меня нет сведений о вашей реализации

Так что, если вы просто хотите отфильтровать пользователей, полученных этим селектором:

export class YourComponent {
  @Select(UserPageState.get('collection')) users$: Observable<User[]>;
  filteredUsers$: Observable<User[]>;

  ngOnInit() {
    const USER = this.creds.credentials['id'];
    this.filteredUsers = this.users$.pipe(
      map(users => users.filter(user => user.id !== USER))
    );

    this.store.dispatch(new UserPageList({ start: 1, length: this.pageSize }));
  }
}

в вашем шаблоне:

  <ul>
    <li *ngFor="let user of filteredUsers$ | async">
      {{ user.name }}
    </li>
  </ul>

Обратите внимание, что вам, вероятно, следует подумать о создании выделенного селектора и добавить USER в свой магазин тоже.

0 голосов
/ 16 марта 2020

Попробуй вот так. Это может быть импорт работы {of, Subject, Observable} из 'rx js';

  private users$= new Subject<void>();
 onusers$: Observable<void>;


 this.onusers$ = this.users$.asObservable();


   this.users$.next(param:{param.filter(x => x.id !== USER))});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...