html - 如何在 Angular 7 中从其他组件调用组件
问题描述
我有一个复选框,如果选中该复选框,我需要在加载应用程序时显示警报消息。但问题是复选框在标题组件中,它与主组件链接。所以当我在主页时,如果那个复选框被选中,我需要在加载应用程序时显示警报消息。这是下面的代码,
header.component.html
<div><input checked type="checkbox">Other-component</div>
header.component.ts
import { Component, OnInit } from '@angular/core';
import { Router } from "@angular/router";
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.css']
})
export class HeaderComponent implements OnInit {
constructor(public router: Router){}
ngOnInit() {}
}
home.component.ts
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import Speech from 'speak-tts';
import { RxSpeechRecognitionService, resultList, } from '@kamiazya/ngx-speech-recognition';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css'],
providers: [ RxSpeechRecognitionService ]
})
export class HomeComponent implements OnInit {
showit:any;
nestedjson:any;
constructor(private formBuilder: FormBuilder,public service: RxSpeechRecognitionService) {
}
ngOnInit() {
}
}
解决方案
1)标题中的问题:如何从其他组件调用组件
您可以在主模板中为标题组件提供一个参考 id。
<app-header #header></app-header>
然后,您可以通过主组件中的 ViewChild 访问标题组件。
@ViewChild('header') headerComponent: HeaderComponent;
但这对于您的需求似乎不是很好的做法。考虑使用服务并使用 RxJs Observables 订阅主题。或者在您的情况下更简单:只需使用双向数据绑定。
2)组件之间实际通信的方式:双向数据绑定
header.component.ts
export class HeaderComponent implements OnInit {
@Input() isChecked: boolean;
@Output() isCheckedChanged = new EventEmitter<boolean>();
constructor(public router: Router){}
ngOnInit() {
}
}
header.component.html
<input [(ngModel)]="isChecked" type="checkbox">
home.component.ts
export class HomeComponent implements OnInit {
isChecked: boolean;
constructor() {}
ngOnInit() {
}
}
home.component.html
<app-header [(isChecked)]="isChecked"></app-header>
编辑:在您的情况下,您也不需要双向绑定,因为您不需要来自 HeaderComponent 的任何反馈。一种数据绑定方式就可以了。然后你可以删除线
@Output() isCheckedChanged = new EventEmitter<boolean>();
并且在 Home 模板中不要在框语法 [()] 中使用香蕉,而只需使用 []:
<app-header [isChecked]="isChecked"></app-header>
推荐阅读
- azure-aks - 使用 Kubectl 命令创建 POD 时,端口映射在 AKS 中不起作用
- javascript - 如何根据创建它的对象更新我的自定义元素
- java - 将我的 Kafka Consumer 连接到 Schema 注册表
- wordpress - 不同的运输等级
- python - 如何在 google colab 上启动 carla 服务器
- ios - 如何解决 Framework not found JitsiMeetSDK.xcframework 错误
- reactjs - 即使单击调试选项-React native,我也看不到网络选项卡中的请求日志
- python - 用 Pandas 中的一个字符串替换一个字符串
- c - 如何将 SHA256 哈希映射到 RELIC 库中的 bn_t 元素?
- python - 不明白 df.shape 和 df.value_counts().sum() 之间的区别