Я бы переместил кнопку отправки в дочернем компоненте 3 в родительский компонент, после чего вы можете использовать @ViewChild()
, чтобы получить ссылку на дочерние компоненты и формы в компоненте, которые позволят вам проверить их действительность. [ 115]
import { Component, OnInit, ViewChild } from '@angular/core';
@Component({
selector: 'ct-parent',
templateUrl: './parent.component.html']
})
export class ParentComponent implements OnInit {
@ViewChild(Child1Component) child1Component: Child1Component;
@ViewChild(Child2Component) child2Component: Child2Component;
@ViewChild(Child3Component) child3Component: Child3Component;
constructor() {}
ngOnInit() {}
submitlClicked() {
//check if form is valid, else throw error
if (this.child1Component.myFormGroup.valid
&& this.child2Component.myFormGroup.valid
&& this.child3Component.myFormGroup.valid) {
// do something
} else {
// throw error
}
}
}
Вам необходимо изменить код и использовать Reactive Forms
( https://angular.io/guide/reactive-forms ):
-- Child 1 --
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'ct-child1',
templateUrl: './child1.component.html']
})
export class Child1Component implements OnInit {
myFormGroup: FormGroup;
constructor(private fb: FormBuilder) {
myFormGroup = this.fb.group({
name: ['', Validators.required]
});
}
ngOnInit() {}
}
Лучше всего сделать это в HttpModule. Я использую HttpModule для управления сеансом NHibernate в приложении MVC, и он отлично работает. В начальном запросе я связываю sessionFactory с ManagedWebSessionContext (в NHibernate, но довольно недокументированным), а затем в конечном запросе я фиксирую любые транзакции и отменяю привязку sessionFactory.
Я думаю, что было бы лучше разделить это и на HttpModule.
Я обычно делаю:
protected void Application_EndRequest(object sender, EventArgs e)
{
}
Это работает, как и ожидалось. Не знаю о событии, хотя.
Экземпляр HttpApplication, который представлен вашим файлом global.asax, является единственным экземпляром, который представляет только первый объект HttpApplication . Не гарантируется, что этот экземпляр HttpApplication будет использоваться для любого другого запроса.
Вам нужно переопределить метод Init() в global.asax и в методе , который подключает любые события, которые вы захотите:
public override void Init() {
base.Init();
EndRequest += MyEventHandler;
}
Пожалуйста, обратитесь к этой статье MSDN для получения более подробной информации об объекте HttpApplication.
.