【问题标题】:splitting angular code in to different components将角度代码拆分为不同的组件
【发布时间】:2021-03-25 10:48:00
【问题描述】:

我的页面上有两个输入字段。一个是电子邮件类型,另一个是带有文本的输入字段。

一切正常。现在我想将组件分成两个 . 例如。我现在有一个“基本信息”组件。我想要一个基本信息组件内的“文本”组件并将文本代码移动到它。 输入.html

 <app-text *ngIf="info.type === 'text'"></app-text>
<input *ngIf="info.type === 'email'" type="text" [formControlName]="controlName" />

输入.ts

public info: InputInterface;

文本.html

<input *ngIf="info.type === 'text'" type="text" [formControlName]="controlName" />

文本.ts

public info: InputInterface;

我得到的错误是 autocomplete.ts 类型未定义。 我想我需要将属性从父组件(输入)传递给子组件(文本)。我是角度新手,无法弄清楚这一点。我尝试了@Input 指令,但错误仍然相同

【问题讨论】:

    标签: angular input components


    【解决方案1】:

    如果您在子组件中声明输入,则需要通过父 HTML 文件将值传递给它。由于您没有在 parent.html 中传递“信息”,因此您会收到该错误。这是正确的方法:

    文本.ts

    @Input() public info: InfoInterface;

    文本.html

    &lt;input *ngIf="info.type === 'text'" type="text"/&gt;

    parent.html(注意 *ngIf 在这里不是强制性的。它存在于您的代码中,所以我也在这里添加它,假设这是您的要求)

    &lt;app-text [info]="parentInfoToBePassed" *ngIf="parentInfoToBePassed.type === 'text'"&gt;&lt;/app-text&gt;

    父.ts

    public parentInfoToBePassed: InfoInterface = {type: 'text'};

    https://stackblitz.com/edit/angular-input-example 这是一个关于如何拆分代码和使用输入的简单示例。

    希望这会有所帮助。有什么不清楚的地方告诉我

    【讨论】:

    • 如果界面中有多个数据怎么办。像类型、标签、默认值和值是动态的
    • 由于我不知道InfoInterface的确切结构,我只写了type:'text',但你也可以添加所有其他字段。整个对象将传递给 text.ts 中的 info。因此在 text.html 中,您将可以访问 info.label、info.defaultValue 等
    • 我不能用这是父 .public info: InputInterface;然后在 parent.html [info]="info"
    • 当然可以!您不会遇到任何冲突,因为它们位于不同的文件中。我只是这样写的,以便于理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 2021-07-26
    • 2017-12-07
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多