如何通过将 id 存储在变量中来渲染组件?

Posted

技术标签:

【中文标题】如何通过将 id 存储在变量中来渲染组件?【英文标题】:How to render a component through the id is stored in variable? 【发布时间】:2020-02-26 19:25:56 【问题描述】:

我有两个组件。 1. App 组件,2. 子组件。

为了更好地理解,代码和输出在 stackblitz 中:https://stackblitz.com/edit/angular-j9cwzl

app.component.ts:

import  Component  from '@angular/core';

@Component(
  selector: 'my-app',
  template: `
    <div id="child"></div>
    <div id="childComponent"></div>
  `
)
export class AppComponent  
  childComponent='child';

child.component.ts

import  Component  from '@angular/core';

@Component(
  selector: '[id=child]',
  template: '<div>I am child</div>'
)
export class ChildComponent   

当我直接在 App 组件的模板中写入子组件的 id 时,它可以很好地呈现。但是当我通过变量写入子组件的 id 时,它只是创建了一个 id="child" 的 div 元素。

我的问题是为什么会这样?如何通过脚本文件中的变量动态呈现带有id的孩子?

【问题讨论】:

blog.knoldus.com/… 【参考方案1】:

我有一个建议,为什么您的插值 childComponent 不起作用。在我看来,Angular 的工作顺序如下:

首先,它会查看您的所有 html,然后尝试查找可以评估为 componentdirective 的属性或选择器

那么第二步就是当我们找到一个组件或者指令的时候,再应用 插值

所以也许这就是为什么你的插值没有在你的选择器中评估的原因。因为选择器的评估已经完成,然后指令的评估开始了。

如果你想决定应该渲染什么组件,那么你可以使用*ngIf声明:

<ng-container *ngIf="childComponentl else anotherComponent">
    <div id="child"></div>
</ng-container>    
<ng-template #anotherComponent>
    test
</ng-template>

打字稿:

childComponent='"child1"';

更新:

如果你想避免硬编码,那么你可以动态加载组件:

Dynamically add components to the DOM with Angular Angular 2.1.0 create child component on the fly, dynamically Insert a dynamic component as child of a container in the DOM

【讨论】:

我不想硬编码选择器 ID。我希望它通过一个变量来呈现它。

以上是关于如何通过将 id 存储在变量中来渲染组件?的主要内容,如果未能解决你的问题,请参考以下文章

通过存储在 Postgresql 中带有特殊字符的变量名中来删除约束

mongodb用变量更新数组

在 redux 中调度存储变量时,React 组件不会重新渲染

如何通过给定的父 ID 将 XML 子节点存储在 PHP 变量中?

React——条件渲染

变量更改时如何重新渲染 vue.js 组件