在Angular 2中,我有一个组件,它有一个子组件.但是,我想获取该子组件的副本,以便在父组件中使用,调用其函数或任何东西.

我发现我可以使用局部变量,这样我就可以使用模板中的组件.然而,我不想只在模板中使用它,我想在组件的实际代码中使用它.

我找到了一种方法,下面是子代码:

//our child
import {Component, OnInit, EventEmitter} from 'angular2/core'

@Component({
  selector: 'my-child',
  providers: [],
  template: `
    <div>
      <h2>Child</h2>

    </div>
  `,
  directives: [],
  outputs: ['onInitialized']
})

export class Child implements OnInit{

  onInitialized = new EventEmitter<Child>();

  constructor() {
    this.name = 'Angular2'
  }

  ngOnInit() {
    this.onInitialized.emit(this);
  }
}

起源:

//our root app component
import {Component} from 'angular2/core'
import {Child} from './child'

@Component({
  selector: 'my-app',
  providers: [],
  template: `
    <div>
      <h2>Hello {{name}}</h2>
      <my-child (onInitialized)="func($event)"></my-child>
    </div>
  `,
  directives: [Child]
})
export class App {
  constructor() {
    this.name = 'Angular2'
  }

  func(e) {
    console.log(e)

  }
}

我在this plunker年前在这里实现了它.但这看起来像是黑客攻击.

难道没有更简单的方法将组件附加到其父变量中的变量吗?

推荐答案

你可以用ViewChild

<child-tag #varName></child-tag>

@ViewChild('varName') someElement;

ngAfterViewInit() {
  someElement...
}

其中varName是添加到元素的模板变量.或者,您可以按组件或指令类型进行查询.

还有其他 Select ,比如ViewChildrenContentChildContentChildren.

@ViewChildren也可以在构造函数中使用.

constructor(@ViewChildren('var1,var2,var3') childQuery:QueryList)

这样做的好处是可以更早地获得结果.

关于使用构造函数或字段的一些优点/缺点,请参见http://www.bennadel.com/blog/3041-constructor-vs-property-querylist-injection-in-angular-2-beta-8.htm.

注:@Query()@ContentChildren()的不推荐前身

Update

Query目前只是一个抽象基类.我还没有发现它是否被使用过

Typescript相关问答推荐

PrimeNG Inputnumber,具有自定义号码格式器

物料UI图表仅在悬停后加载行

net::BER_RECTION_REUSED和Uncatch使用Axios和TanStack-Query useMutation时未捕获错误(DelivercMutation)

使用FormArray在Angular中添加排序

输入元素是类型变体的对象数组的正确方法是什么?'

与字符串文字模板的结果类型匹配的打字脚本

使用axios在ngOnInit中初始化列表

打字类型保护递归判断

扩展参数必须具有元组类型或传递给REST参数

布局组件中的Angular 17命名路由出口

为什么我的导航在使用Typescript的React Native中不起作用?

类型脚本-在调用期间解析函数参数类型

S,为什么我的T扩展未定义的条件在属性的上下文中不起作用?

如何静态键入返回数组1到n的函数

TaskListProps[]类型不可分配给TaskListProps类型

我的类型谓词函数不能像我预期的那样工作.需要帮助了解原因

如何提取具有索引签名的类型中定义的键

如何键入';v型';

如何从联合类型推断函数参数?

带有 Select 器和映射器的Typescript 泛型