【发布时间】:2018-10-28 18:10:52
【问题描述】:
我有一个具有自动完成搜索功能的标题组件,当用户搜索某些内容并从建议下拉列表中选择一项时,正文将相应更改。在正文中,有 3 个部分根据三种不同的条件显示。这里 header 和 body 是 2 个不同的组件,因此如何触发 body 中的函数,该函数具有一些逻辑以及 false 和 true 变量。当用户从自动完成搜索下拉列表中选择某些内容时。
我正在尝试通过服务方式进行沟通。
标头代码
<div class="docs-example-viewer-body custom-search" *ngIf="showSearch">
<select class="search-dropdown">
<option value="1">All</option>
<option value="2">Brand</option>
<option value="3">Molecule</option>
</select>
<app-auto-complete [mySearchData]="mySearchData" (onchange)="onchange($event)" (onsearchKey)="getOnsearchkey($event)"></app-auto-complete>
<i class="material-icons">search </i>
</div>
正文代码
<div *ngIf="aaa"> 123</div>
<div *ngIf="bbb"> 333</div>
标头组件 ts
onChange(value) {
this.planningService.changeOccured(value);
}
规划服务ts
@Output() change: EventEmitter<any> = new EventEmitter();
changeOccured(value) {
this.change.emit(value);
}
并尝试像这样从 body 组件中捕获事件。但它不会在身体组件中触发。有什么问题
body 组件 ts
onChange(value){
this.isSearchScreen = false;
this.isPlanListScreen = true;
this.isCreateScreen = false;
console.log('value',value)
this.myPlan.moleculeId = value.id;
this.selectedCombination = new SelectedCombination(value.brand,value.name);
this.planningService.getProductMapData(value.name).subscribe((data)=>{
this.strengthANdPacks = data;
},(error)=>{
console.log(error);
});
this.planningService.getAllPlans(value.id,false).subscribe((data)=>{
this.allPlans = data;
},(error)=>{
console.log(error);
});
}
ngOnInit(){
this.planningService.change.subscribe(value => {
console.log('change occured')
this.onChange(value)
});
}
我无法从正文组件中的服务中捕获事件。谁能帮帮我
参考:https://medium.com/dailyjs/3-ways-to-communicate-between-angular-components-a1e3f3304ecb
【问题讨论】:
-
试试这个,你可以将它添加为指令并调用它的方法stackoverflow.com/a/50268682/4399281
-
您的组件之间的关系是什么?他们被路由了吗?他们是父母/孩子吗?
-
对不起,其实是兄弟组件s
-
@Always_hungry 请检查我编辑的问题
标签: angular typescript components angular-services