Как вызвать функцию внутри директивы, связанной с формой angular6 - PullRequest
0 голосов
/ 17 сентября 2018

Привет Есть ли способ вызвать функцию внутри директивы, когда форма становится нетронутой. То есть мне нужно добавить класс CSS в заголовок вкладки, когда форма становится нетронутой

<form [formGroup]="awayForm" (ngSubmit)="onSubmit()" awayConfirm [cancelClicked]="cancelClick">
</form>

Это моя форма. В моей форме была директива awayConfirm. Эта директива просто указывает, что форма во вкладке грязная (просто добавьте указание класса CSS). Теперь мне нужно удалить класс, когда форма становится нетронутой

    export class AwayConfirmCheckComponent implements OnInit {  
      ......
     onSubmit(){
        this.awayForm.markAsPristine()
     }
    }

Когда вызывается markAsPristine, мне нужно вызвать функцию внутри директивы awayConfirm.

1 Ответ

0 голосов
/ 17 сентября 2018

Поскольку между этими двумя компонентами нет никакой связи, вы можете передавать данные между ними с помощью общей службы.

Я бы создал BehaviorSubject<boolean> в общем сервисе. Затем я вызову для него метод next и передам его true, когда я установлю для form значение pristine. Я также subscribe к этому BehaviorSubject в другом компоненте. Как только метод next будет вызван, я смогу получить уведомление об этом в другом компоненте.

В службе общего пользования:

formPristinenessChanged: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(null);

В компоненте с формой:

export class AwayConfirmCheckComponent implements OnInit {
  constructor(private service: SharedService) {}
  ......
  onSubmit() {
    this.awayForm.markAsPristine();
    this.service.formPristinenessChanged.next(true);
  }
}

В других компонентах:

constructor(private service: SharedService) {}

this.service.formPristinenessChanged.subscribe(pristine => {
    if(pristine) // formWasSetToPristine
});
...