【发布时间】:2017-08-23 18:31:16
【问题描述】:
当我有深层嵌套层次结构时,如何从子组件调用主组件函数?
我有 3 个组件,我包含在浏览器组件中的按钮组件和包含在主组件中的浏览器组件。
单击按钮时,我需要调用主组件内的函数。
按钮组件
@Component({
selector: 'cb-button',
templateUrl: 'cb-button.component.html',
styleUrls: ['cb-button.component.scss']
})
export class CbButtonComponent {
@Output() onClick: EventEmitter<any> = new EventEmitter();
onBtnClick(): void {
this.onClick.emit();
}
}
按钮组件html
<div (click)="onBtnClick()">
<button>btn</button>
</div>
浏览器组件
@Component({
selector: 'topology-browser',
templateUrl: 'topology-browser.component.html',
styleUrls: ['topology-browser.component.scss']
})
export class TopologyBrowserComponent {
@Input('campus') campus: Campus;
}
浏览器组件 html
<div>
<h1>browser title</h1>
<cb-button (click)="editCampus()"></cb-button>
</div>
最后在主要组件中我包括浏览器组件
main-component.ts
editCampus() {
alert('clicked');
}
html
<topology-browser [campus]="campus"></topology-browser>
当我点击按钮时出现以下错误
Errorself.parentView.context.editCampus 不是函数
【问题讨论】:
-
如果你想将数据传递到几层深处,你应该使用共享服务
-
首选方法是使用共享服务并将其注入子构造函数。与stackoverflow.com/a/42405146/3103979 重复
标签: angular typescript angular2-directives angular2-components