javascript - 当服务中数据发生变化时如何通知组件

标签 javascript angular

我有一个自定义错误处理程序服务,只要应用程序中出现错误,它就会收到通知,现在我想通知组件有关错误的信息,以便该组件向用户显示错误对话框,我尝试过事件发射器,观察者但没有任何东西通知组件...

这是我的服务...

@Injectable()
export class ErrorHandlerService implements ErrorHandler {
  public apiError: Subject<any> = new BehaviorSubject(false);
  apiError$ = this.apiError.asObservable();
  constructor(private errorLogService: ErrorLogService
  ) {}

  handleError(error) {
    this.apiError.next(error); 
    console.log("ERROR = " + error);
  };}

还有组件...

@Component({
  selector: 'app-error-log',
  templateUrl: './error-log.component.html',
  styleUrls: ['./error-log.component.scss'],
  providers: [ErrorLogService]
})
export class ErrorLogComponent implements OnInit {

  constructor(
    private errorHandlerService: ErrorHandlerService

  ) {
    this.errorHandlerService.apiError$.subscribe(data => {

      alert("error in component = " + data);

    });
  }

  onNoClick(): void {
    // this.dialogRef.close();
  }

  ngOnInit() {
    this.errorHandlerService.apiError$.subscribe(data => {

      alert("error in component = " + data);

    });
  }

}

最佳答案

具有以下格式的方法可以给出服务执行是否成功的输出。希望以下代码对您有帮助

   //Code in service.ts
   @Injectable()
    export class ErrorHandlerService implements ErrorHandler {
        public apiError: Subject<any> = new BehaviorSubject(false);
        apiError$ = this.apiError.asObservable();
        constructor(private errorLogService: ErrorLogService
        ) { }

        private handleError(error) {
             return Observable.throw(error.json().msg || 'Server error');
        }
        _forgotPassword(userId, passwords, isResetPwd) {
            return this.http.post(this.forgotPasswordUrl,
                {
                    userId: userId,
                    passwords: passwords,
                    isResetPwd: isResetPwd
                })
                .map(res => res.json())
                .catch(this.handleError);
        }
    }

 //Code in component class file

  this.errorHandlerService._forgotPassword(userId, passwords, isResetPwd).
  subscribe(data => {
    // Code here.....
   });

关于javascript - 当服务中数据发生变化时如何通知组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48925773/

相关文章:

javascript - 完成后 n 秒重复请求(Angular2 - http.get)

javascript - 如何防止 Angular 2中的状态加载

javascript - 更改不可变映射中的键

javascript - 在 AngularJS 中搜索 JSON 文件

angular - 这是将 Disqus 嵌入 Angular2 组件的正确方法吗?

javascript - 如何制作 Primeng 通用组数组

angular - 我应该如何在 Angular 8 中为 @ViewChild 使用新的静态选项?

javascript - 跨平台,跨浏览器的方式来播放Java脚本中的声音?

javascript - 如何在 jsp 文件的 span 标记上从 JavaScript 呈现 html 代码?

javascript - 尽管 Fiddle 工作但仍收到 "Uncaught TypeError: start.getTime is not a function"