Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 秋田角机404_Angular_Angular Akita_Akita - Fatal编程技术网

Angular 秋田角机404

Angular 秋田角机404,angular,angular-akita,akita,Angular,Angular Akita,Akita,我正在调查NgRx的替代方案。到目前为止,秋田是一个很好的选择,但我正在与错误管理作斗争。有时我希望一个错误是应用程序范围的,有时我希望它由一个组件管理。在下面的示例中,我启动了一个404错误,我希望我的组件能够意识到这一点,并相应地采取行动,但我不知道如何执行。你能帮忙吗 DummyService(秋田): 组成部分: constructor( private akitaDummyQuery: AkitaDummyQuery, private akitaDummyServi

我正在调查NgRx的替代方案。到目前为止,秋田是一个很好的选择,但我正在与错误管理作斗争。有时我希望一个错误是应用程序范围的,有时我希望它由一个组件管理。在下面的示例中,我启动了一个404错误,我希望我的组件能够意识到这一点,并相应地采取行动,但我不知道如何执行。你能帮忙吗

DummyService(秋田):

组成部分:

  constructor(
    private akitaDummyQuery: AkitaDummyQuery,
    private akitaDummyService: AkitaDummyService
  ) {
  }

  ngOnInit() {

    this.akitaDummyQuery.selectEntity(666).subscribe(
      akDummy => {
        if (!akDummy) {
          this.akitaDummyService.get(666);
          return;
        }
        this.dummy= Dummy.parse(akDummy.result);
      },
      error => {
        //here I would like to catch the error in the component in order to display a component level error message. 
        alert(error);
      }
    );
  }

}
我可以这样处理错误:

this.akitaDummyQuery.selectEntity(id).subscribe(
  akDummy => {
    if (!akDummy) {
      this.akitaDummyService.get(id).catch(err => {
        if (err.statusText === 'Not Found') {

        }
      });
      return;
    }
    this.dummy = Dummy.parse(akDummy.result);
  });

但当我这样做时,akita redux对象仍处于“加载”状态=true

感谢@NetanelBasal我能够解决我的问题,我做的一切都是错误的:

秋田服务

export class AkitaDummyService {
  constructor(private akitaDummyStore: AkitaDummyStore, private dummyService: DummyService) {
  }
  get(id: number) {
    return this.dummyService.get(id).pipe(tap((dummy) => this.akitaDummyStore.add(createAkitaDummy(dummy.data))));
  }
}
秋田问题

export class AkitaDummyQuery extends QueryEntity<AkitaDummyState, AkitaDummy> {

  constructor(protected store: AkitaDummyStore) {
    super(store);
  }

  selectEntity<R>(id: getIDType<AkitaDummyState>): Observable<Dummy | any> {
    return super.selectEntity(id).pipe(filter(dummy => !!dummy), map((dummy: AkitaDummy) => Dummy.parse(dummy)));
  }

}
export class AkitaDummyQuery extends QueryEntity<AkitaDummyState, AkitaDummy> {

  constructor(protected store: AkitaDummyStore) {
    super(store);
  }

  selectEntity<R>(id: getIDType<AkitaDummyState>): Observable<Dummy | any> {
    return super.selectEntity(id).pipe(filter(dummy => !!dummy), map((dummy: AkitaDummy) => Dummy.parse(dummy)));
  }

}
export class PageDummyComponent implements OnInit {
  dummy: Dummy;

  constructor(
    private akitaDummyQuery: AkitaDummyQuery,
    private akitaDummyService: AkitaDummyService
  ) {
  }

  ngOnInit() {
    this.loadDummy(5);
  }


  loadDummy(id) {
    if (!this.akitaDummyQuery.hasEntity(id)) {
      this.akitaDummyService.get(id).subscribe({
        error: (err) => {
          // when 404 do something

        }
      });
    }
    this.akitaDummyQuery.selectEntity(id).subscribe(dummy => this.dummy = dummy);
  }
}