根据 Angular 2 中的 DOM 状态实例化嵌入组件

2024-06-24

常见菜单使用案例

<menu>
    <menu-item1></menu-item1>
    <menu-item2></menu-item2>
    <menu-item3></menu-item3>
</menu>

菜单模板

<div *ngIf="open$ | async">
    <ng-content></ng-content>
</div>

听到这一切我很惊讶menu-item*成分 (和他们所有的孩子) 将被实例化,尽管它们存在于 DOM 中并且menu成分*ngIf状态。他们的OnInit and AfterViewInit即使菜单从未打开过,钩子也会被调用OnDestroy尽管从 DOM 中进行了真正的添加-删除,但永远不会触发。这是一个关于此的已关闭问题https://github.com/angular/angular/issues/13921 https://github.com/angular/angular/issues/13921(有一个带有示例的plnkr)和角度文档的问题https://github.com/angular/angular.io/issues/3099 https://github.com/angular/angular.io/issues/3099.

但这个问题仍然存在 - 我该如何做才能使菜单项仅在打开菜单时实例化并在关闭时正确销毁?所有钩子应该只触发与真实 DOM 状态相关的事件。


更新角度 5

ngOutletContext被重命名为ngTemplateOutletContext

也可以看看https://github.com/angular/angular/blob/master/CHANGELOG.md#500-beta5-2017-08-29 https://github.com/angular/angular/blob/master/CHANGELOG.md#500-beta5-2017-08-29

original

您可以使用

<menu>
  <template>
    <menu-item1></menu-item1>
    <menu-item2></menu-item2>
    <menu-item3></menu-item3>
  <template>
</menu>
@Component({
  selector: 'menu',
  template: `
<div *ngIf="open$ | async">
  <template [ngTemplateOutlet]="templateRef"></template>
</div>
`
})
class MenuComponent {
  @ContentChild(TemplateRef) templateRef:TemplateRef;
}

您还可以将上下文传递给ngTemplateOutlet(有一些答案说明了如何做到这一点,我没有时间不去查找它们)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据 Angular 2 中的 DOM 状态实例化嵌入组件 的相关文章

  • 重置 Angular 7 Reactive 验证

    我使用 Angular Reactive 表单作为搜索表单 我希望能够重置表格 我用以下代码做到了这一点
  • 如果两个条件之一为真,如何隐藏角度元素

    如果条件之一为真 如何隐藏角度元素 我尝试使用 ngIf productID category Lane productID category Val 这不起作用
  • ngTemplateOutlet - Angular 5 嵌套模板驱动表单

    我有一个从我的组件之一传递的 ng template 并且我有一个占位符来接受传递的 ng template 到我的组件上 如下 ngTemplateOutlet 中所示 div div
  • 为什么我在运行 ngserve 命令时收到以下错误消息?

    运行 ngserve 命令时 我不断收到以下错误消息 我该如何解决这个问题 您似乎不依赖于 angular core 这是一个错误 别忘了跑步npm install设置后 应该可以做到这一点
  • Angular2 迭代对象数组

    我有一个如下所示的数组 causes any Specification Missing false Unclear false Wrong false Changed false Better Way false Design Missi
  • ng2-bootstrap 在 Angular 2 中不起作用(“alert”不是已知元素:)

    我已经通过以下方式在运行 Angular 2 0 1 的项目上安装了 ng2 bootstrap npm install ng2 bootstrap save 我已经这样设置我的项目 systemjs config js function
  • 角度文件上传

    我是 Angular 的初学者 我想知道如何创建 Angular 5文件上传部分 我试图找到任何教程或文档 但我在任何地方都没有看到任何内容 有什么想法吗 我尝试过ng4 文件 https github com bonjurmrfirst
  • JHipster:使用标准过滤实体 - 预期的 Angular 客户端方法

    我最近开始使用JHipster http www jhipster tech 感谢这个出色项目的维护者 在 JHipster 的当前版本 撰写本文时为 4 10 2 中 实体可以通过实体子生成器启用过滤 或者通过包含filter Entit
  • Angular2 中的 MVW 代表什么?

    我有很多介绍 MVC MVP MVVM 等的链接 但我没有得到一个可以说明 M 在 Angular2 中到底代表什么 V 在 Angular2 中到底代表什么以及 W 在 Angular2 中到底代表什么的信息 也许W有一个答案 那就是W代
  • 角度2 $routeChangeStart , $routeChangeSuccess ,$routeChangeError

    在 Angular2 中 这些 Angular1 事件的等价物是什么 routeChangeStart routeChangeSuccess routeChangeError 我想在根应用程序组件中使用这些事件来处理任何路线更改 提前致谢
  • 聚合物纸下拉菜单在浏览器中未正确呈现

    我对简单的纸张下拉菜单的渲染 html 遇到问题 列表项并不显示为样式化的 菜单 而只是出现在页面上的项目列表 单击渲染的纸张输入组件 渲染的下拉列表的一部分 确实会为波纹设置动画 但不会为菜单和菜单项的显示 隐藏设置动画 单击列表中的某个
  • 如何通过方法添加标记,openlayers 4,Angular 4

    我想在我的地图中添加实时位置标记 作为第一步 我只想在地图中显示一个静态点 纬度 经度 或标记 由添加标记我的代码中的方法 这是我的代码 import Component OnInit AfterViewInit ViewEncapsula
  • Angular2 - *ngIf 路线是某个参数

    我有一条路线 main item id 看起来像 http localhost 5000 main item JJHkhfghsiu45ve 在我的 html 中 我希望能够使用 ngIf 来显示这是否是路线 我不想为此使用路由器插座 我遇
  • 源有 X 个元素,但目标仅允许 1 个

    打字稿编译显示此错误 源有 X 个元素 但目标仅允许 1 个 export const FooMapping id FooOperation display string id FooOperation Undefined display
  • 对 Angular 2 应用进行版本控制

    如何标记 Angular 2 应用程序的版本 有一些问题 例如视图 通过templateUrl 在路线视图 子组件 中没有更新 我尝试过类似的事情
  • 如何将离子搜索栏聚焦在按钮单击上

    我正在努力集中注意力ion searchbar单击按钮但它不起作用 这是我的代码 打字稿 ViewChild search search ElementRef focusButton console log this search Sear
  • 如何在 Angular 中按 ID 显示博客详细信息

    我想在 Angular 中通过 ID 显示博客详细信息 为此 当您单击博客主页上的按钮时 应用程序会将您带到博客详细信息页面 即 pagina component html 文件 我实现了在此处显示所有博客 但我真正想要的是显示一个独特的博
  • Angular 2 TypeError:无法读取 null 的属性“animate”

    我正在使用 Chrome 51 和 Angular 2 rc4 并在加载我的 Angular 应用程序时在控制台中弹出以下错误 TypeError Cannot read property animate of null at e supp
  • Angular 2 CanActivate 被调用两次

    我在使用 Angular 时遇到了路线守卫的问题 当导航到由于我未登录而不允许的页面时 我的 CanActivate 防护被调用两次 我有 1 个根模块 并在那里提供了我的 CanActivate 防护和其他服务 先感谢您 这是我的路由器
  • Angular2模板参考变量和动态更新

    我最初试图在 Angular2 中设置一个模板引用变量 这样我就可以反转表的排序顺序 而不必进行绑定 但当我单击复选框时 我没有得到界面的动态更新 我创建了一个简单的 plunker 以防应用程序中的其他内容可能会扰乱代码 并且我看不到正在

随机推荐

  • 将 NSString 分成行(以适合所需的宽度)

    我正在尝试将 NSString 分成几行以适合所需的宽度 因为它会发生在内部 sizeWithFont constrainedToSize 有没有比猜测中断发生在哪里更好的方法呢 sizeWithFont If NSLayoutManage
  • Python 在列表列表中查找值

    最近我必须找到某个列表中的某些内容 我使用了 def findPoint haystack needle haystack 1 2 3 4 5 6 7 8 9 for x in range len haystack if needle in
  • 从 SERVICE 执行 COMPONENT 方法

    我正在尝试执行一个组件method from a 服务方式 我看到了另外 2 个线程 Link1 如何从服务调用组件方法 https stackoverflow com questions 40788458 how to call comp
  • Vuetify 连接 v-select 的 item-text 中的两个字段

    有没有办法在 v select 的项目文本字段中将两个字段连接在一起 我让它适用于下拉列表值 但可见条目不显示这两个字段 问题出在这里 item text data item name data item group Code
  • MageUI.exe 删除 CompatibleFrameworks 元素

    我们使用 MageUI exe 手动创建不同版本的 ClickOnce 部署 以进行开发 测试和生产 我们改变出版商以便使程序图标出现在 开始 菜单的单独文件夹中 我们使用MageUI exe版本适用于 Windows 7 和 NET Fr
  • Blazor EditForm 从列表绑定

    我正在尝试制作一个页面来编辑客户数据 客户对象有一个电话号码 字符串 列表 因为大多数人都有固定电话和手机 我似乎找不到一种方法将其放入编辑表单中 我尝试使用 foreach 循环 但它无法绑定到此 我还尝试在循环中使用本地副本并绑定到它
  • 单击按钮时如何更改按钮的背景颜色?

    我研究了很多 发现这个 JSFiddle http jsfiddle net eYgdm 看起来像我需要的 但是 当我单击按钮时 page背景正在改变 我想要button s相反 单击时要更改颜色 div width 100 height
  • 如何在rails中使用like子句查询?

    我想在搜索关键字时获得 json 格式的数据 所以我使用 LIKE 子句并像这样查询 select from employees where fname like or mname like or lname like or usernam
  • Sql Server 复制需要实际的服务器名称才能连接到服务器

    当我想要创建新的发布或订阅时 我收到以下消息 Sql Server 复制需要实际的服务器名称才能连接到服务器 不支持通过服务器别名 IP 地址或任何其他备用名称进行连接 指定实际的服务器名称 有谁知道我应该做什么 我在以下链接中找到了解决方
  • 什么是 8BITMIME? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 什么是 8bitmime 7位和8位
  • 正则表达式中的子字符串应根据长度排序的建议背后的原因是什么?

    最长的第一个 gt gt gt p re compile supermanutd supermanu superman superm super 最短的优先 gt gt gt p re compile super superm superm
  • 如何让 Git diff 忽略版本号更改?

    有没有办法从 Git diff 中消除版本号变化噪音像这个 https github com keith Xcode app strings commit 9502c601cad31ef452c4cd6e8ece3982345fba1d 具
  • 在 C# 中对 PDF 进行 Base64 编码?

    有人可以提供一些有关如何执行此操作的说明吗 我可以对常规文本或字节数组执行此操作 但不知道如何处理 pdf 我要先将pdf填充到字节数组中吗 Use File ReadAllBytes http msdn microsoft com en
  • 在本地存储中设置变量

    目前正在设计一款游戏 思路是高分 这样当当前分数大于本地存储分数时就将其替换 localStorage setItem highScore highScore var HighScore localStorage getItem highS
  • (DatabaseError: no such table: django_session) Django 1.3 selenium 测试期间出现错误

    我正在尝试使用 django selenium 来测试我的 django1 3 应用程序 用于测试的数据库后端是sqlite3 这是我的设置文件的片段 if test in sys argv DB ENGINE django db back
  • 带有 Open vSwitch 的 LXC

    我想尝试OVS 软件Linux交换机 http openvswitch org http openvswitch org 使用我的 LXC 容器 以 Ubuntu 作为主机和来宾 所以我已经安装了它 apt get install open
  • plt.style.use('./deeplearning.mplstyle') 不起作用

    我正在尝试运行 Coursera 中机器学习专业的可选实验室 并且我坚持使用一些库和函数 我无法安装 plt style use deeplearning mplstyle 我收到错误消息 ModuleNotFoundError Trace
  • Java AES 加盐加密

    好吧 事实证明我在加密 解密方面很糟糕 我只是不明白 我怎样才能让Java加密String message1 hello world with String salt mySalt 使用AES加密 加密后我该如何解密 如果您有时间提供最基本
  • 复制两个 Excel 实例之间的范围

    我正在运行两个单独的 Excel 实例 并且尝试将数据从一个工作簿中的范围复制到另一个工作簿中 我有这个代码 Sub CopyValues Dim xlApp As Excel Application Set xlApp GetObject
  • 根据 Angular 2 中的 DOM 状态实例化嵌入组件

    常见菜单使用案例 menu menu