每个回答的帖子,每个教程都会显示 EventEmitter()
可以用于子组件,如果父母正在监听,它可以与父组件通话;但是,只有在子组件是父模板的一部分时才有效;否则,只有应用程序的根组件才能获取emit .
这是一个简单的结构(在 radio-group
上使用 <ng-content></ng-content>
来转换孩子们):
<radio-group>
<radio></radio>
<radio></radio>
<radio></radio>
</radio-group>
当检查自定义无线电组件时,它应该发出一个事件 - 效果很好 . 但是自定义无线电组即使正在收听也不会听到这个事件,因为在这个实现中,它的子节点不是它的模板的一部分 .
我不明白Angular Material 2 Radios是怎么回事的;但对于那些了解Angular 2的人来说,它们是一个很好的参考 .
单击Angular's Material 2 Radio Demo的"Examples"选项卡,查看我想要复制的内容 .
同样,我不是要复制和粘贴它们的实现,我试图让子组件在子组件不是父模板的一部分时将事件传递给父组件 .
3 回答
如果你去that plunker,你会发现它们具有以下结构:
radio-ng-model-example
是根组件 . 因此,他们使用EventEmitter
在md-radio-button
和md-radio-group
之间进行通信,并使用ngModel
在md-radio-group
和radio-ng-model-example
之间进行通信 .当子组件不是父模板的一部分时,它们基本上是内容子组件 . 它们的范围在Parent组件中 .
例如,如果您有一个名为
my-component
的组件,并且在其模板中有类似下面的内容,somevar1
,somevar2
,somemethod1
,somemethod2
来自my-component
的范围 .基于这种理解,可以非常安全地说
parent
和child
可以被视为my-component
范围内的兄弟姐妹 . 因此,您可以使用my-component
范围在这两者之间进行通信 .例,
子组件,
在模板中使用上述组件的组件 .
Update
如果你在parent-Child之间传递值,你可能没什么创意,并且可以在模板本身中完全做到 . 更新了Plunker !!
如果你必须处理任何事情,上面的那个考虑场景 .
看看这个Plunker !!
希望这可以帮助!!
回答 Headers 问题而不使用ngModel,bindings或EventEmitter(因为它不能在模板之外工作),并且足够灵活,可以在每个子组件中包含任何类型的内容,在Angular 2.4中,这是其他实现的另一种方法:
Example:
"Presenters"在Odin议会("Organizer") . 只有一位演示者可以一次说话(出现) . 接下来的人,向组织者发出他们意图的信号,组织者阻止其他主持人说话,这样新的主持人就可以恢复他们的演讲 .
(演示截图减去额外的嵌套内容:)
单击任何按钮会导致所有演示者隐藏,但您只是单击了该演示者 .
Usage:
organizer.component.html:
organizer.component.ts:
presenter.component.html:
presenter.component.ts: