没有模板局部变量的Angular 4访问模板元素

标签 angular angular-components angular-template

我有一个父组件(比如说 ParentComponent ),我需要向它动态地 添加许多子组件(比如 ChildComponent1ChildComponent2 …… ChildComponentN )。每个组件都不同。

我按照这个来解决我的问题:Angular 2 RC5-6 - Dynamically insert a component

但是为了访问将保存我的 <div> 的模板元素(一个简单的 ChildComponent )通过 @ViewChild ,我需要在此 <div> 上设置一个模板局部变量元素。

但是,在我的例子中,我不能那样做,因为我不能用动态名称 设置模板局部变量。所以我的 <div>元素仅以动态添加的唯一 id 属性为特征(如 <div id="child1"> )。

有什么方法可以访问我的 <div> element 通过 typescript 中的组件实现没有模板局部变量 ?

最佳答案

我想你可以创建一个指令 mydir 来暴露一个元素:

@Directive({selector: 'mydir'})
export class MyDir {
  @Input('mydir') id;
  constructor(public vc: ViewContainerRef) {

  }
}

然后将它应用到div:

<div [mydir]="child1">
<div [mydir]="child2">

然后从父组件中查询:

@ViewChildren(MyDir) children;

ngAfterViewInit() {
   const specificID = 'child1';
   const instance = children.find((c)=>{c.id === specificID});
   const vc = instance.vc;
}

关于没有模板局部变量的Angular 4访问模板元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44847488/

相关文章:

angular - Ionic 使用 IdentityServer4 作为 IDP

javascript - 使用 ocLazyLoad 在表中延迟加载

Angular 2 - ng-bootstrap 如何为他们的 NgbRadio 指令提供 NgbRadioGroup 和 NgbButtonLabel?

angular - 找不到类型为 '[object Object]' 的不同支持对象 'object'。 NgFor 仅支持绑定(bind)到 Iterables,例如 Arrays

dart - Dart 中角组件的 Material list 的误差

javascript - 在 AngularJS 中使用指令的多个子 HTML 元素问题

angular - RxJs 扩展和延迟运算符未按预期工作

javascript - TypeScript/RxJS - 可观察的订阅()方法完成()未运行

angular - 使用 Material Design 的表格中的单选按钮

css - 我应该将类属性添加到 Angular 组件选择器标签吗