加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – @ViewChild:访问grand-child方法

发布时间:2020-12-17 07:31:15 所属栏目:安全 来源:网络整理
导读:我有三个嵌套组件,称为level0,level1和level2,定义如下: @Component({selector: 'level2',template: `divI am level 2/div`,})export class Level2 { getName(){ return "my name is 'TWO'"; }} @Component({selector: 'level1',template: `divI am level 1
我有三个嵌套组件,称为level0,level1和level2,定义如下:
@Component({
selector: 'level2',template: `<div>I am level 2</div>`,})
export class Level2 {
  getName(){
    return "my name is 'TWO'";
  }
}
@Component({
selector: 'level1',template: `<div>I am level 1<level2></level2></div>`,directives: [Level2]
})
export class Level1 {
  getName(){
    return "my name is 'ONE'";
  }
}
@Component({
selector: 'level0',template: `<div>I am level 0<level1></level1></div>`,directives: [Level1,Level2]
})
export class App {
@ViewChild(Level1) level1:Level1;
@ViewChild(Level2) level2:Level2;
ngAfterViewInit() {
  if(this.level1){var name1 = this.level1.getName();}
  if(this.level2){var name2 = this.level2.getName();}
  console.log("name1",name1);
  console.log("name2",name2);
  }
}

在控制台中,我希望看到:

name1 my name is 'ONE'
name2 my name is 'TWO'

但我改为:

name1 my name is 'ONE'
name2 undefined

我错过了什么?为什么Level0组件不能通过@ViewChild访问Level2?

有没有办法访问Level0中的Level2方法?

Here is the plnkr

我认为目前不可能.

ViewQueryMetadata API doc说如下:

Supports the same querying parameters as QueryMetadata,except descendants.

QueryMetadata API doc有这个后代的例子:

Configure whether query looks for direct children or all descendants of the querying element,by using the descendants parameter. It is set to false by default.

… code here not shown …

When querying for items,the first container will see only a and b by default,but with Query(TextDirective,{descendants: true}) it will see c too.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读