Angular 角度8:将形状标记为从父组件接触
如何声明从父组件接触的子组件表单标记 目前在子组件中,我们有一个输入变量和ngOnChangesAngular 角度8:将形状标记为从父组件接触,angular,typescript,angular8,angular-reactive-forms,Angular,Typescript,Angular8,Angular Reactive Forms,如何声明从父组件接触的子组件表单标记 目前在子组件中,我们有一个输入变量和ngOnChanges @Input public markFormTouchedFlag: boolean if (this.markFormTouchedFlag) { this.addressform.markAllAsTouched(); } 奇怪的是,是否有一种更有效的方法使子组件窗体(addressform)与父组件相接触 也许应该让问题更一般化,找到formvalidity,markuntouc
@Input public markFormTouchedFlag: boolean
if (this.markFormTouchedFlag) {
this.addressform.markAllAsTouched();
}
奇怪的是,是否有一种更有效的方法使子组件窗体(addressform)与父组件相接触
也许应该让问题更一般化,找到formvalidity,markuntouched,但我只会坚持第一个问题。如果需要将同一个变量(“markFormTouchedFlag”)传递给多个组件,您可以使用这种方法。此方法将数据存储在可观察对象中,并通过订阅此方法将自动更新变量(无论何时使用) 创建用于存储数据的服务:
import { Injectable } from '@angular/core';
import { Observable, Subject } from 'rxjs';
@Injectable({ providedIn: 'root' })
export class FlagService {
private subject = new Subject<any>();
updateFlag(flag: bool) {
this.subject.next({ flag: flag });
}
clearFlag() {
this.subject.next();
}
getFlag(): Observable<any> {
return this.subject.asObservable();
}
}
在这个组件(父组件)中,我们有两个函数set和clear flagSetflag功能用于设置服务中的值。一旦在订阅了ever值的服务层中设置了它,它将被更新clearFlag函数用于设置具有空值的变量
子组件:
import { Component, OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs';
import { FlagService } from '../services/FlagService.service';
@Component({
selector: 'app',
templateUrl: 'app.component.html'
})
export class AppComponent implements OnDestroy {
flag: any;
subscription: Subscription;
constructor(private flagService: FlagService) {}
setFlag(): void {
this.flagService.sendFlag(flag);
}
clearFlag(): void {
this.messageService.clearMessage();
}
}
import { Component } from '@angular/core';
import { FlagService } from '../services/FlagService.service';
@Component({ templateUrl: 'home.component.html' })
export class HomeComponent {
flag: any;
subscription: Subscription;
constructor(private flagService: FlagService) {
this.subscription = this.flagService.getMessage().subscribe(flag => { this.flag = flag; });
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
通过这种方式,您可以从observable中获取值,每当标志在服务中更改时,它将在父组件中更改后在子组件中自动更新,并且由于构造函数中的订阅,它将在组件中设置为flag
在组件销毁时,我们正在取消对值的订阅。因此,当您从Parents传递markFormTouchedFlag=true时,上述方法是否有效?我希望上述方法有效,如果您想使其动态,只需创建observable类型的变量,并发送更新的值,您必须在子组件中侦听该值,并根据需要对其进行触摸。是的,上述方法正在工作,不知是否有更有效的方法似乎我们正在与服务紧密结合,也有许多用于触摸表单的代码,不过我会查看,谢谢