angular - 从另一个文件中的组件调用位于 Ionic Angular 页面上的函数
问题描述
我是 Ionic 和 Angular 的新手,一直在努力寻找解决问题的方法。我有一个特定的函数,我想在某个页面文件上调用它。我需要从按钮组件文件中调用此函数(以便在单击时执行它)。我想知道如何做到这一点,因为我尝试寻找解决方案但找不到解决方案,而且我不能只是复制该功能,因为这会重新加载一些需要在页面中更新的数据。先感谢您。
settings.page.ts 上的函数(包含函数的页面):
loadData() {
this.storageService.getData().then(datas=> {
if (datas) {
this.datas = datas;
for(let data of datas) {
this.average = this.average + (data.value / data.total);
}
this.average = (this.average / datas.length);
this.average100 = this.average * 100;
}
});
我需要在 new-button.component.ts 上调用函数的地方:
async showPopover( event ) {
const popover = await this.popoverCtrl.create({
component: NewComponent,
event: event,
mode: 'ios'
});
await popover.present();
}
解决方案
对于这个特定的需求,您首先需要了解组件通信是如何在 Angular 中工作的。
角度组件是定义明确的封装单元,可以通过适当的组织方式与其他组件进行通信,而不仅仅是一个组件随机调用其他组件的方法。
你有几个选择
1.)您可以在调用组件中引入EventEmitters并在要运行方法的组件中侦听该事件。前提是您的组件是链接的(父->子关系)
2.) 您可以将您案例中的公共代码loadData() 方法移动到@Injectable服务,并使用依赖注入将其引入new-button.component.ts文件。
3.)您可以使用RxJS Subjects,在按钮单击时调用主题的下一个方法,这将在任何订阅该主题的组件中被监听。
请找到有关该主题的这几个链接
https://dzone.com/articles/understanding-output-and-eventemitter-in-angular
https://medium.com/@manivel45/event-emitter-vs-subject-cross-component-communication-8934376605e1
https://netbasal.com/event-emitters-in-angular-13e84ee8d28c
谢谢。
推荐阅读
- html - 将网站转换为不能在 Edge 上运行的 Progressive Web App (PWA)
- css - 有没有办法让 div 的高度设置为`overflow-y: auto`
- python - 将 Heroku 一次性测功机作为 `:detached` 运行会导致它消耗更多内存吗?
- php - 使用 PHP 打开文件的首选 fopen 模式是什么?
- c# - 有没有办法在移动后停止将 pos2 移动到 pos1 ?
- python - 如何在 PyCharm 中快速对齐鼠标指针?
- php - 重命名库包含上的特定符号,以避免致命错误“无法重新声明”
' - tsql - SQL - 如何使用 DECLARE 语句在 SQL 查询中选择其他参数
- php - 自定义帖子类型查询在短代码中创建空白无限循环
- c++ - 尽管初始化,可变大小的对象可能未初始化错误