订阅按钮内的角度订阅

时间:2019-03-18 15:39:13

标签: angular rxjs

我当前有一个按钮,当单击该按钮时,我要调用服务:

  saveAssignment(formValues) {
if (this.rulesService.validate(3, 1)) {
    // continue to save
    console.log('trigger save');
    this.assignmentService.saveAssignment(formValues).subscribe((data) => {
    console.log('saved!');
  });
} else {
  alert('came in here instead');
    }
  }

规则服务:

validate(actionId: number, referenceId: number): boolean {
let hasErrors = false;
let result: any;
this.validateRulesAPI(3, 1).subscribe((data) => {
  // some logic here will set hasErrors property to true/false
});
    return hasErrors;
  }

ruleService我想让它返回布尔值,无论它是否验证了参数,这样我就可以重用它,问题是在调用完成之前代码返回时命令已关闭,这是另一种安排方式这样,让他们互相等待?所以rulesService.validate将等待布尔返回,然后如果返回true,则继续调用saveAssignments?否则,我会看到警报(“来这里”),然后再运行验证代码。

2 个答案:

答案 0 :(得分:2)

您可以使用switchMap的{​​{1}}可管道运算符来订阅内部可观察项。

为进行验证,您可以返回一个rxjs并相应地映射到Observable

boolean

然后以validate(actionId: number, referenceId: number): Observable<boolean> { return this.validateRulesAPI(actionId, referenceId).pipe(map(data) => { // Do the stuff and check for errors // if has error then ------------> return false // if does not have error then ---> return true }); } 方法使用saveAssignment

switchMap

希望这会有所帮助。

答案 1 :(得分:0)

您正在执行异步验证。与同步同步稍有不同。

Angular form validation tutorial中说明了如何处理这种验证,这将使您可以让Angular处理预订。