javascript - 如何在 Angular 中为外界获取输入并引发事件?
问题描述
我想知道如何从外部世界获取输入并引发冒泡到外部世界的自定义事件(即在角度组件之外)。我知道我无法进入@Input()
根组件。那我该怎么做:
- 从 Angular 外部将一组对象(比如
T[]
)传递给我的 Angular 组件<app-root>
。 - 引发一个事件
<app-grandchild>
,使事件从角度组件中冒出并命中 DOM 树根或<body>
.
假设以下 DOM 层次结构:
<body>
<app-root>
<app-child>
<app-grandchild></app-grandchild>
</app-child>
</app-root>
</body>
解决方案
您的问题需要解释 Angular 中的几个概念:组件交互和内容投影。
我整理了一个示例,将两者结合起来以满足您在问题中描述的内容:
@Component({
selector: 'app-child',
template: `
<ul>
<li *ngFor="let obj of arrayOfObjects"> {{ obj.id }} </li>
</ul>
<ng-content></ng-content>
`,
})
class AppChildComponent {
@Input() arrayOfObjects: object[];
}
@Component({
selector: 'app-grandchild',
template: `Am the grandchild!`,
})
class AppGrandChildComponent implements OnInit {
@Output() somethingHappened = new EventEmitter<string>();
ngOnInit(){
this.somethingHappened.emit('yellow');
}
}
@Component({
selector: 'app-root',
template: `
<app-child [arrayOfObjects]="[
{id: '123'},
{id: '456'}
]">
<app-grandchild
(somethingHappened)="handleSomething($event)">
</app-grandchild>
</app-child>
`,
})
class AppComponent {
handleSomething(event){
document.body.style.backgroundColor = event;
}
}
完整示例:https ://jsfiddle.net/c945j08v/1/
我强烈建议您阅读更多关于 Angular 文档和博客的内容。
- https://angular.io/guide/component-interaction
- https://blog.angular-university.io/angular-ng-content/
我希望这有帮助。
推荐阅读
- swift - 如何将屏幕亮度设置为特定值?IODisplaySetFloatParameter 没有按预期改变屏幕亮度
- python - 在python中通过控制台输入数据
- javascript - 使用 jquery 时 Wordpress 菜单消失
- python - Python OpenCV 轮廓排序
- excel - Excel中跨多个工作表的相同单元格的列表以及工作表名称
- c# - 如何更改现有 Visual Studio 项目的编程语言 - 不转换代码
- r - 在 R 中优化函数
- java - 读取属性文件
- javascript - 如何过滤棱镜中的布尔值
- ios - 如何将默认 iOS 元素解析为特定特征?