在不同的组件上提交表单

时间:2017-08-07 09:15:15

标签: forms angular

我在组件上创建了基于模型的表单,但是提交按钮放在不同的组件上。

现在按下按钮时会触发此功能:

@Input()
form: any;
...
if(this.form.valid)             
   this.saveDefinition(); 

但是如果表单无效,我想用表单“发送信号”回到我的组件。如果表单无效,则应突出显示所有无效字段(就像在同一组件上提交表单时一样)。

我已经搜索了一段时间,我甚至无法知道这是否可行,如果有可能你们可以帮助我继续前行吗?

感谢

1 个答案:

答案 0 :(得分:2)

您可以使用服务,如下所示:

form.service.ts文件

@Injectable() 
export class FormService {
     onFormSubmitted = new EventEmitter<any>();
}

然后在appModule提供程序appModue.ts文件中注册此服务

providers: [
  ...
  FormService
  ...
] 

firstComponent.ts文件

@Component({
  ...
});
export class FirstComponent implements{

    constructor( public formService:FormService) {}

    onFormSubmit(formData:any) {
       this.formService.onFormSubmitted.emit(formData);
    }    
}

secondComponent.ts文件

export class SecondComponent implements OnInit{

   constructor ( public formService:FormService ) {}

   ngOnInit() {
      this.formService.onFormSubmitted.subscribe( (formData : any ) => {
         this.onFormSubmit(formData);
      })
   }

   onFormSubmit(formData : any) {
       // your logic for submitting the form
   }
}

第一个和第二个组件具有相同的FormService实例,因此它们具有相同的eventEmitter实例,第一个组件在表单提交时发出事件,第二个组件正在侦听它。 它被称为使用服务的跨组件通信。