如何在 Angular 6 中从父级 HTML 编辑共享组件

Posted

技术标签:

【中文标题】如何在 Angular 6 中从父级 HTML 编辑共享组件【英文标题】:How to edit a shared component from parent's HTML in angular 6 【发布时间】:2019-12-27 00:09:45 【问题描述】:

child.component.ts

//ignoring all imports

@component(
   selector: 'app-child',
   template: './child.component.html'
)

import class ChildComponent 

   //logic not of use

   public isData: boolean = false;

child.component.html

<input type="text" value="xyz" [readonly]="isData">

parent.component.ts

//ignoring all imports

parent.component.html

<app-child></app-child>

在这里,我想在父组件中使用子组件,但我不想要输入字段只读,而是在子组件中更改它我想在父组件中更改它,以便我的子组件应该不会被打扰。

我将如何实现它?

【问题讨论】:

【参考方案1】:

您可以通过几个简单的步骤来实现: 在Child-Component.ts 文件中:

import Input from '@angular/core';

@Input('isData') isData;

在 parent-Component.html 文件中:

<app-child isData="true"></app-child>

【讨论】:

【参考方案2】:

您可以通过使用查询(获取引用)嵌套在父级中的所有子组件

@ViewChildren(ChildComponent) dataItems: QueryList<ChildComponent>

或仅引用 1:

@ViewChild(ChildComponent) dataItem: ChildComponent;

然后您可以从父级订阅和控制每个单独组件的状态:

this.dataItem.isData = true // or false.

【讨论】:

【参考方案3】:

您应该在子组件中提供一些参数来打开/关闭只读属性 - 例如

child.component.html

<input type="text" value="xyz" [readonly]="isData || onlyForRead">

child.component.ts

@Input('onlyForRead') onlyForRead: boolean;

parent.component.html

<app-child [onlyForRead]='false'></app-child>

【讨论】:

以上是关于如何在 Angular 6 中从父级 HTML 编辑共享组件的主要内容,如果未能解决你的问题,请参考以下文章

在 AngularJS 组件中从父级到子级通信事件

在 JavaScript 中从父级调用子方法

如何在 Angular 1.5 中从父控制器访问组件方法

如何在Angular 5中从父组件继承子组件中的css样式

在 useEffect() 钩子中从父级传递的子级调用函数,React

如何将函数从父级传递给深层嵌套的子级并将@input 值用于Angular 8中传递的函数?