簡體   English   中英

僅當組件Angular4中的服務變量狀態更改時才運行函數

[英]How to run function only when service variable state changed in component Angular4

我有一個稱為InfoFormService的服務,它有一個名為isInValidating的變量。

當組件按如下所示調用validateEmail(email)函數時,將變量設置為true。

@Injectable()
export class InfoFormService {

    private VALIDATE_EMAIL_URL: string = 'XXX';
    isInValidating: boolean = false;

    constructor(@Inject(APP_CONFIG) private config: AppConfig,
                private http:Http
    ) {

      console.log(this.config.apiEndpoint)

    }

    validateEmail(email) {
      console.log(email)
      this.isInValidating = true;
      return this.http.get(`${this.config.apiEndpoint}/${this.VALIDATE_EMAIL_URL}${email}`)
    }

}

每當電子郵件輸入文本更改時,該組件就會調用validateEmail。

因為ValidateEmail需要時間,所以當我單擊“提交”按鈕時,isInValidating值可能為true或false,但是一旦完成ValidateEmail操作,isInValidating值將設置為false,如上面的代碼所示。

我想要的是延遲單擊“提交”按鈕時發生的提交操作,直到服務的isInValidating值設置為true為止。

export class AbcBtnComponent implements OnInit {

    constructor(private formService:InfoFormService) {

    }

    ...

    emailField.valueChanges
      .filter(val => {
        return val.length >= 1;
      })
      .debounceTime(100)
      .switchMap(val => this.formService.validateEmail(val))
      .subscribe(res => {

        console.log(res)
        let validation = res.json();

        if (validation['valid']) {
          emailField.setErrors(null);
        } else {
          emailField.setErrors({ validEmail: true });
        }

        this.formService.isInValidating = false;

      });

    onSubmit(value) {
        // Here I want to delay until formService's isInValidating value = true

        submitAction(value)
    }

}

我想我必須使用Subject或Observable,但不知道如何使用它。

請幫我!

在組件中

get isInValidating(): boolean {
    return this.formService.isInValidating;
}

在模板中

<button type="submit" [disabled]="isInValidating">Submit</button>
this.formService.validateEmail(val))
      .subscribe(res => {

this.formService.validateEmail(val)
      .subscribe(res => {
..)

從技術上講,如果您訂閱validateEmail調用並在那里執行代碼,則它應該可以工作。 但我可能誤會了您的問題。

您也可以只刪除isInValidating並在其中包含onSubmit(value),例如:

this.formService.validateEmail(val)).subscribe(res => {
//logic to check your validation
if(valid) this.onSubmit(val)
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM