Angular 2:从另一个组件调用现有组件

2024-04-07

我正在使用路由功能使用 Angular 2 创建一个应用程序,并且我有一个由较高路由之一呈现的弹出组件,并且我想在由以下之一呈现的组件中的单击事件上打开它更深层次的路线。

例如,假设我有一个基本路由器,其模板包含弹出窗口:

@Component({
    selector: 'application',
    template: '<router-outlet></router-outlet><popup-component></popup-component>',
    directives: [PopupComponent]
})
@RouteConfig([
    { ... },
    { ... }
])
export class AppRoute { }

以及一个带有 open 方法的简单弹出组件:

@Component({
    selector: 'popup-component',
    template: '<div [class.show]="isVisible">This is a popup.</div>'
})
export class PopupComponent {
    public isVisible: boolean = false;
    show() {
        this.isVisible = true;
    }
}

如何在已由 AppRoute 从驻留在路由树中某处的另一个组件中呈现的特定 PopupComponent 上调用此 show 方法?

我尝试过像这样使用依赖注入:

@Component({
    selector: 'my-component',
    template: '<button (click)="showPopup()"></button>'
})
export class MyComponent {
    constructor(private popup: PopupComponent) { }
    showPopup() {
        this.popup.show();
    }
}

但这只是创建了一个尚未实际渲染的 PopupComponent 的新实例。我怎样才能调用AppRoute渲染的那个呢?


您需要共享服务

import {Injectable} from 'angular2/core';
import {Subject} from 'rxjs/Rx';
export class PopupService{
   show:Subject<boolean> = new Subject();
}

将服务添加到提供者AppRoute

@Component({
    providers:[PopupService],
    selector: 'application',
    ...
])
export class AppRoute { }

将服务注入到popup-component并订阅节目主题。

@Component({
    selector: 'popup-component',
    template: '<div [class.show]="isVisible">This is a popup.</div>'
})
export class PopupComponent {
    public isVisible: boolean = false;
    constructor(private popup: PopupService) {
      popup.show.subscribe( (val:boolean) => this.isVisible = val );
    }
}

将其注入到您想要显示弹出窗口的任何组件中,调用next on the show主题;

@Component({
    selector: 'my-component',
    template: '<button (click)="showPopup()"></button>'
})
export class MyComponent {
    constructor(private popup: PopupService) { }
    showPopup() {
        this.popup.show.next(true);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2:从另一个组件调用现有组件 的相关文章

随机推荐

  • 使用描述符进行类型提示

    In 这个拉取请求 https github com python mypy pull 2266看起来添加了对描述符的类型提示支持 然而 似乎没有发布最终的 正确 用法示例 也没有添加任何文档到typing module https doc
  • C# htmlagilitypack,捕获重定向

    大家好 这真的很简单 我希望 我正在使用 htmlagility pack 进行网络爬虫 那么 如果我输入 url 然后将我定向到新的 url 会发生什么情况 如何捕获该新的重定向 URL 如果 htmlagilitypack 没有办法 有
  • 登录 GCP 和本地

    我正在构建一个旨在在 Google Cloud Platform 中的虚拟机上运行的系统 但是 作为一种备份形式 它也可以在本地运行 话虽这么说 我目前的问题是日志记录 我有两个记录器 都可以工作 一个本地记录器和一个云记录器 云记录器 i
  • 在 FTP 上上传文件

    我想将文件从一台服务器上传到另一台 FTP 服务器 以下是我上传文件的代码 但它抛出错误 远程服务器返回错误 550 文件不可用 例如 未找到文件 无法访问 这是我的代码 string CompleteDPath ftp URL strin
  • 使用贝叶斯优化的深度学习结构的超参数优化

    我为原始信号分类任务构建了 CLDNN 卷积 LSTM 深度神经网络 结构 每个训练周期运行约 90 秒 超参数似乎很难优化 我一直在研究优化超参数的各种方法 例如随机或网格搜索 并发现了贝叶斯优化 虽然我还没有完全理解优化算法 但我认为它
  • Keras model.fit log 和 Sklearn.metrics.confusion_matrix 报告的验证准确性指标彼此不匹配

    问题是报道的validation accuracy我从 Keras 获得的价值model fit历史显着高于validation accuracy我得到的指标sklearn metrics功能 我得到的结果model fit总结如下 Las
  • Java gRPC 服务器用于长寿命流的有效实现

    我想了解 gRPC 框架的一部分 用于长期流的资源管理 假设我们有无限的罕见 每秒一次左右 事件源 我们希望通过 grpc 流的方式将其流式传输到客户端 这些事件由服务器上的单个应用程序线程生成 我看到两种可能的流事件实现 在 rpc 调用
  • 如何在具有复合 PK 的实体中使用“findBy”(Hibernate JPA)

    我正在用 bootspring 学习 findByDate int date 以前一直工作直到我搬家int Date进入内部类 现在我可以保存新条目 但无法按日期检索它们 我需要改变什么 Transactional public inter
  • 在 package:html、dart:html、dart:io(类 HttpClient)和 package:http API 之间进行选择来获取 HTTP 资源

    我意识到目前至少有三个 官方 Dart 库允许我执行 HTTP 请求 更重要的是 其中三个库 dart io 类 HttpClient package http 和 dart html 各自具有不同的 不兼容的 API 截至今天 packa
  • Phonegap - 检测仿真

    Phonegap 应用程序如何确定它是在实际设备上运行还是在模拟设备上运行 我需要一个同时适用于 Android 和 iOS 的解决方案 你有没有看一下设备接口 http docs phonegap com en 3 3 0 cordova
  • 如何编写 mql4 代码 (EA) 用矩形标记列出的蜡烛形态

    我对写作很陌生mql4代码 如果我能在出现以下烛台图案时获得一些绘制矩形的帮助 我将不胜感激 FIG1 Run code snippet blockquote class imgur embed pub a href imgur com a
  • GPU编程简介[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 每个人的桌面上都有一台以显卡 GPU 形式存在的巨大的大规模并行超级计算机 GPU 社区的 hello world 相当于什么 我该做什么 去哪
  • CBC 模式下的 HMAC-SHA256 和 AES-256

    我最近遇到以下代码示例 http code activestate com recipes 576980 authenticated encryption with pycrypto 用于使用 AES 256 CBC 和 SHA 256 H
  • 使用 Spring JPA 和 Hibernate 访问 Session 以启用过滤器

    在 Spring JPA Hibernate 环境中 我需要启用 Hibernate 实体过滤器 所以我应该有权访问 Hibernate Session 对象 但我正在使用 EntityManagerFactory 和 Spring JPA
  • 如何隐藏共享操作提供程序附近的共享操作(使用最多的)图标?

    看图片 如何隐藏 P 图标 表示分享到 Pinterest 它们都在操作栏上 我使用 ActionBarSherlock 如果您愿意保留所有分享历史数据模型 但只是不想要额外的 默认共享活动 icom 答案在使用 ShareActionPr
  • 将 java.sql.Timestamp 转换为 Java 8 ZonedDateTime?

    将 Joda 时间迁移到 Java 8 Joda UserObject user new UserObject user setCreatedAt new DateTime rs getTimestamp columnName 迁移到 Ja
  • 如何确定 C++03 中的类型是否可取消引用?

    In C 03 如何判断一个类型是否T是可解引用的吗 我的意思是 我如何静态地确定是否 t将是一个有效的表达式t类型的T 我的尝试 template
  • GitHub 与现有 GPG 密钥合并失败

    我们有多个 github 存储库 需要对拉取请求进行签名提交 有时 由于警告 提交需要签名 我们无法合并拉取请求 即使提交已签名 看起来创建拉取请求的人可以合并它 Sqash 和合并 即使它只包含 1 次提交 这发生在两个帐户都是拉取请求的
  • 迭代器的性能优势?

    使用迭代器可以提供哪些性能优势 如果有 这似乎是解决许多问题的 正确方法 但它是否会创建更快 更内存敏感的代码 我正在专门用 Python 思考 但不要将答案限制于此 实际上 Python 邮件列表上有一篇关于此的非常好的邮件 迭代器与列表
  • Angular 2:从另一个组件调用现有组件

    我正在使用路由功能使用 Angular 2 创建一个应用程序 并且我有一个由较高路由之一呈现的弹出组件 并且我想在由以下之一呈现的组件中的单击事件上打开它更深层次的路线 例如 假设我有一个基本路由器 其模板包含弹出窗口 Component