Хорошие решения для этого, которые я видел, включают использование GridBagLayout (как отмечено выше) или MiGLayout , хотя, поскольку последний не является частью стандартного Java, он должен быть загружен и помещается на путь класса перед использованием. MiGLayout не так сложно использовать.
Из того, что я понял после прочтения вашего поста и комментарии ниже, у вас есть структура следующим образом в вашем parent.component.html
<app-child1></app-child1>
<app-child2></app-child2>
<button type="button">Click Me!</button>
При нажатии на кнопку, вы хотите получить данные от ребенка1 и child2 в родительский компонент.
Таким образом, один из способов решения этой проблемы - использование ссылочной переменной шаблона,
<app-child1 #child1></app-child1>
<app-chidl2 #child2></app-child2>
<button type="button" (click)="getDataFromChild(child1,child2)">Click Me!</button>
Внутри вашего родительского машинописного текста
getDataFromChild(child1,child2) {
dataFromChild1 = child1.getData();
dataFromChild2 = child2.getData();
}
Добавьте метод getData () в child1 и ц child2 компонента и возвращает необходимые данные.
Если вы просто хотите передать некоторые данные, как показано в вашем примере, вы можете сделать это следующим образом
Message: {{ child.message }}
<app-child #child></app-child>
Вы разговариваете со своим ребенком через @Input()
и разговариваете с родителями по @Output
.
Например, вы получаете сообщение от ребенка, используя @Output
.
Вот ваш дочерний компонент.
import { Component} from '@angular/core';
@Component({
selector: 'app-child',
template: `
`,
styleUrls: ['./child.component.css']
})
export class ChildComponent implements AfterViewInit {
@Output() messageChanged: EventEmitter<string>();
message = 'Hola Mundo!';
constructor() {
this.messageChanged = new EventEmitter<string>();
}
ngAfterViewInit() {
this.messageChanged.next(this.message);
}
}
Вот как должен выглядеть ваш родитель.
import { Component } from '@angular/core';
@Component({
selector: 'app-parent',
template: `
Message: {{ message }}
<app-child (messageChanged)="onMessageChange($event)"></app-child>
`,
styleUrls: ['./parent.component.css']
})
export class ParentComponent {
constructor() { }
message:string;
onMessageChange(message: string) {
this.message = message;
}
}