Typescript 如何从Angular2中的父组件类访问子组件类?

Typescript 如何从Angular2中的父组件类访问子组件类?,typescript,angular,Typescript,Angular,在Angular 2中,如何从父组件类访问子组件类?e、 g import {Component, View} from 'angular2/core'; @Component({selector: 'child'}) @View({template: `...`}) class Child { doSomething() { console.log('something'); } } @Component({selector: 'parent'}) @Vie

在Angular 2中,如何从父组件类访问子组件类?e、 g

import {Component, View} from 'angular2/core';

@Component({selector: 'child'})
@View({template: `...`})
class Child {
    doSomething() {
        console.log('something');
    }
}

@Component({selector: 'parent'})
@View({
    directives: [Child],
    template: `<child></child>`
})
class Parent {
    constructor() {
        //TODO: call child.doSomething() when the child component is ready
    }
}
从'angular2/core'导入{Component,View};
@组件({选择器:'子'})
@视图({模板:`…`})
班童{
doSomething(){
console.log('something');
}
}
@组件({选择器:'父'})
@看法({
指令:[儿童],
模板:``
})
班级家长{
构造函数(){
//TODO:在子组件就绪时调用child.doSomething()
}
}

在本例中,我将如何从
组件的构造函数或某个回调函数调用
组件的
doSomething()
方法。

这非常简单,但您必须记住以下几点,首先是代码

若要引用您的子视图,在这种情况下,您希望您的子视图位于视图中,因此必须使用
@ViewChildren
,并且必须等待视图初始化,才能这样做

@组件({
选择器:“你好”,
模板:``,
指令:[儿童]
})
导出类父级实现AfterViewInit{
@ViewChildren(Child)children:QueryList;
afterViewInit(){
为了(让这个孩子,孩子们){
儿童。doSomething();
}
}
}
注意

如果要传输到ES6,则
afterViewInit()
中的循环将起作用,因为angular2在内部使用。如果您正在传输到ES5,那么您必须从typescript开始解决它(请参阅plnkr了解解决方法)

这是我的建议


我希望它有帮助:)

您可以在父组件中使用
@ViewChild
来访问子组件的任何方法

    @Component({
      selector: 'parent',
      directives: [Child]
    })

    export class Parent {
        @ViewChild(Child) childComponent: Child;

        ngAfterViewInit() {
        // The child is available here
        childComponent.doSomething();
      }
    } 

注意:此代码段适用于angular2 rc4版本

在我的例子中,我只有一个子组件,所以我只使用
this.children.first
。谢谢@rob如果您只需要一个子组件,请使用而不是
@ViewChildren
哦,更好。谢谢,有没有一种方法可以使用ID或其他什么来访问一个特定的孩子?就像JS中的getElementById一样,这里的备忘单上也写着“不适用于指令”。还有别的办法吗?