从组件外部提交表单

时间:2019-09-17 14:49:07

标签: angular typescript

我有组件about.component.ts

onSubmit(redirectAfter) {

    if (this.form.invalid) {
        this.notificationService.error(this.translateService.instant('fail'));
        return;
    }
....

现在在about.html.ts中:

<user [form]="this.form"></user>

现在在带有标签用户<user>的组件中:

@Component({
selector: 'user',
templateUrl: './user.component.html',
styleUrls: ['./user.component.scss']
})
export class UserComponent implements OnInit {
   @Input() form?: FormGroup;
   validateAndClose() {
       this.form.onSubmit(false);
   }

所以我想在UserComponent中调用AboutComponent中表单的提交。我尝试过这种方法,但是没有用。你有主意吗?提前谢谢。

3 个答案:

答案 0 :(得分:1)

您可以尝试@Output()来自UserComponent的自定义事件,这将触发AboutComponent中的提交

@Output() public submitEvent = new EventEmitter();

然后在AboutComponent模板中:

<user-component (submitEvent)="submit()"></user-component>

答案 1 :(得分:0)

一个简单的解决方案是使用事件。 您可以在子组件中创建输出EventEmitter。 父母对此事件有反应。

<user-component (formSubmit)="parentSubmitFunc()"></user-component>

@Component({
  selector: 'user',
  templateUrl: './user.component.html',
  styleUrls: ['./user.component.scss']
})
export class UserComponent implements OnInit {
   @Output() formSubmit = new EventEmitter<any>(); // <--

   validateAndClose() {
       [...]
       formsubmit.emit(anypayload); // <--
   }

文档为here

答案 2 :(得分:0)

还有另一种无需使用Output事件发射器即可访问父组件方法的方法。通过使用@Host

export class UserComponent implements OnInit {
  @Input() form?: FormGroup;
  parentCmp: AboutComponent;
  constructor(@Host parentCmp: AboutComponent){
    this.parentCmp = parentCmp;
  }

  validateAndClose() {
    this.parentCmp.onSubmit()
  }

  

限制:父方法不应为私有

Demo using @Host