在 Angular 中从其父级访问扩展组件的方法

Access extended component's method from its parent in Angular

提问人:WowBlueSky 提问时间:10/16/2023 最后编辑:WowBlueSky 更新时间:10/16/2023 访问量:23

问:

我正在 Angular 中构建一个动态向导组件。我希望组件是智能的,以便用户无需处理任何配置,所要做的就是从组件调用向导并提供其步骤组件,如下所示:

<wizard>
    <wizard-step>
        <select-fruit></select-fruit>
    </wizard-step>
    <wizard-step>
        <quantity></quantity>
    </wizard-step>
</wizard>

我正在使用:

@ContentChildren(WizardFullPageStepComponent)
public stepComponents: QueryList<WizardFullPageStepComponent>;

动态获取步骤并初始化向导的逻辑。
和 组件扩展了通用组件:
select-fruitquantity

@Component({
    selector: "av-wizard-generic-step",
    template: ""
})
export abstract class WizardGenericStep {
    abstract isValid(): void;
}
@Component({
    selector: "select-fruit",
    template: "Nice fruit"
})
export class FruitStepComponent{
    public isValid(): void {
        console.log("is the fruit is valid")
    }
}

我想在组件中实现逻辑,以便能够调用扩展的实现方法(此处来自),以便根据显示的当前步骤调用预期的方法。wizard-stepisValid()FruitStepComponent

为了尽可能保持组件的通用性,我不想引用扩展组件,而只想引用通用组件:

@Component({
    selector: "av-wizard-full-page-step",
    templateUrl: "./wizard-full-page-step.component.html"
})
export class WizardFullPageStepComponent implements AfterContentInit {
    @Input()
    public showStep: boolean = false;

    @ContentChild("content", { static: false })
    public wizardGenericStep: WizardGenericStep;

    ngAfterContentInit() {
        // here this.wizardGenericStep is undefined
    }
}

我已经尝试了以前的解决方案,但值未定义。我怎样才能做到这一点?有没有我可以使用的组件树注入器?我会喜欢一个丑陋的解决方案,因为向导组件的逻辑将对使用者隐藏。

Angular TypeScript 抽象类 angular-content-projection

评论


答: 暂无答案