angular - 根据子组件中的选择更改父组件的颜色
问题描述
我有一个子组件,它有一个颜色下拉列表。根据下拉列表中选择的内容,父组件的颜色应该改变。
截至目前,我能够根据颜色选择成功更改子组件的颜色,但我想更改父组件的颜色。有什么帮助吗?当我使用参考变量时,我还可以在父组件中打印下拉列表的值,但我希望颜色也能改变。
header.component.html:
import { Component, OnInit,Output,EventEmitter } from '@angular/core';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.css']
})
export class HeaderComponent implements OnInit {
styles: string[] = [];
selectedStyle: string;
constructor() {
}
ngOnInit(){
this.styles = ['red','green','blue','none'];
}
}
header.component.html
<div [ngClass]="selectedStyle" >
<select [(ngModel)]="selectedStyle">
<option *ngFor="let s of styles" [ngValue]="s">{{s}}</option>
</select>
</div>
app.component.html
<div [ngClass]="child.selectedStyle"><app-header #child></app-header></div>
<h2>{{title}}</h2>
<h1>{{child.selectedStyle}}</h1>
解决方案
处理标题组件 HTML 中的选择更改事件。
header.component.html
<select [ngModel]="selectedStyle" (ngModelChange)="onStyleChange($event)">
<option *ngFor="let s of styles" [ngValue]="s">{{s}}</option>
</select>
为您的选择添加一个事件处理程序,并将一个事件发射器添加到您的标头组件打字稿中。
header.component.ts
// trigger events using this
@Output() styleChange: EventEmitter<string> = new EventEmitter<string>();
// handle style change events using this
onStyleChange(style: string): void {
// trigger event
this.selectedStyle = style;
this.styleChange.emit(style);
}
处理父 HTML 中的样式更改事件。
app.component.html
<app-header #child (styleChange)="onStyleChange($event)">
</app-header>
处理父 typescript 中的样式更改事件,并设置可用于父 HTML 的属性。
app.component.ts
style: string;
onStyleChange(style: string): void {
this.style = style;
}
从子组件发出的任何样式现在都可供父组件使用。
推荐阅读
- python-3.7 - 'or' 运算符的 dunder 方法是什么?
- java - Java:匿名集
在函数调用中 - android - 如何在 Sqlite 中链接两个表?
- amazon-web-services - AWS Elasticsearch 更新版本 6.3 -> 7.1
- html - 徽标图像未出现在浏览器选项卡的标题栏中
- sql - 如何在 Laravel Query Builder 中实现 union all 和 Group by?
- amp-html - amp-form 表单提交失败:错误:HTTP 错误 406
- javascript - 我怎样才能在这种链接上添加一个请稍候的电话
- openshift - Openshift OKD 过多的日志记录
- c++ - 为什么向量化使用浮点数比使用双精度数更有效?