当前位置:  开发笔记 > 编程语言 > 正文

@ViewChild和@ContentChild有什么区别?

如何解决《@ViewChild和@ContentChild有什么区别?》经验,为你挑选了3个好方法。

角2提供@ViewChild,@ViewChildren,@ContentChild@ContentChildren用于查询一个组件的派生元素装饰器.前两个和后两个有什么区别?



1> alexpods..:

我将使用Shadow DOMLight DOM术语回答您的问题(它来自Web组件,请参见此处).一般来说:

Shadow DOM - 是您的组件的内部DOM,由您(作为组件创建者)定义并且对最终用户隐藏.例如:

@Component({
  selector: 'some-component',
  template: `
    

I am Shadow DOM!

Nice to meet you :)

`; }) class SomeComponent { /* ... */ }

Light DOM - 是组件的最终用户提供给组件的DOM.例如:

@Component({
  selector: 'another-component',
  directives: [SomeComponent],
  template: `
    
      

Hi! I am Light DOM!

So happy to see you!

` }) class AnotherComponent { /* ... */ }

所以,你的问题的答案很简单:

之间的区别@ViewChildren@ContentChildren@ViewChildren寻找在阴影DOM元素,同时@ContentChildren寻找他们光在DOM.


`@ViewChildren` ==你自己的孩子; `@ ContentChildren` ==别人的孩子
来自Minko Gechew的博客文章http://blog.mgechev.com/2016/01/23/angular2-viewchildren-contentchildren-difference-viewproviders/对我来说更有意义.@ContentChildren是通过内容投影插入的子项( 之间的子项).来自Minkos博客:"另一方面,在给定组件的主元素的开始和结束标签之间使用的**元素称为*内容子**." 这里描述了Angular2中的Shadow DOM和视图封装:http://blog.thoughtram.io/angular/2015/06/29/shadow-dom-strategies-in-angular2.html.
对我而言,听起来像`@ TemplateChildren`(而不是`@ViewChildren`)或`@ HostChildren`(而不是`@ ContentChildren`)会有更好的名字,因为在这样的背景下我们所谈论的一切都是观点相关的,wrt绑定也与内容相关.

2> drew moore..:

正如其名,@ContentChild@ContentChildren查询将返回现有的内部指令视图的元素,而@ViewChild@ViewChildren不仅要看直接对你的视图模板元素.



3> mithun_daa..:

来自Angular Connect的视频提供了有关ViewChildren,ViewChild,ContentChildren和ContentChild的优秀信息 https://youtu.be/4YmnbGoh49U

@Component({
  template: `
    
      
    
`
})
class App {}

@Component({
  selector: 'my-widget',
  template: ``
})
class MyWidget {}

my-widget观点来看,comp-aContentChildcomp-bViewChild.CompomentChildrenViewChildren在xChild返回单个实例时返回一个iterable.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有