ng-content 选择绑定变量

2024-01-03

我正在尝试使用 Angular 2 创建一个表单生成器。一个非常基本的示例如下:

this.fields = [{name: 'Name', type: 'text'}, {name: 'Age', type: 'number'}];

但我也想支持自定义元素,例如:

this.fields = [
  {name: 'Name', type: text}, 
  {name: 'Age', type: 'custom', customid: 'Ctl1'},
  {name: 'Whatever', type: 'custom', customid: 'Ctl2'}
];
// template:
<super-form [fields]="fields">
  <Ctl1><input type="number" ...><Ctl1>
  <Ctl2><whaterver-control ...><Ctl2>
</super-form>

在我的表单生成器组件中,我有类似的内容:

<div *ngFor="let f of fields">
  <div [ngSwitch]="f.type">
    <span *ngSwitchWhen="'custom'">          
      <ng-content select="f.customid"></ng-content>
    </span>
  </div>
</div>

但考虑到我在这里,这显然行不通。这是 ng2 的限制吗?如果是这样,我想我可以对 5 个可选内容元素进行硬编码,并检查它们是否已指定并且没有动态选择,但这是一个 hack。

Cheers


我知道这是一个老问题,但这是我在搜索此功能时首先想到的地方之一,因此我将添加我如何解决它的方法。

ngContent 仅用于静态投影,因此您不能使用它进行任何绑定。如果您需要在投影内容中进行绑定,您可以使用 ngTemplateOutlet 和 ngOutletContext。

使用示例:

<my-component>
    <template let-item="item">
        <h1>{{item?.label}}</h1> - <span>{{item?.id}}</span>
    </template>
</my-component>

在 MyComponent 中,您可以使用 ContentChild 访问该模板:

@ContentChild(TemplateRef) templateVariable: TemplateRef<any>;

然后在组件的模板中将其传递给 ngTemplateOutlet,如下所示:

<div *ngFor="let item of list">
    <template [ngTemplateOutlet]="templateVariable" [ngOutletContext]="{item: item}"></template>
</div>

ngOutletContext 是可选的,但它允许您创建将在模板中绑定到的对象。请注意,我创建了一个属性item在上下文对象中。这与我在模板上放置的名称相匹配:let-item="item"

现在的消费者my-component可以传入用于列表中每个项目的模板。

信用: 这answer https://stackoverflow.com/a/37662335/710268引导我走向正确的方向。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ng-content 选择绑定变量 的相关文章

随机推荐

  • Visual Studio 2010 启动时出现未知错误

    我正在尝试从桌面启动 Visual Studio 2010 但只是弹出此错误框 显示 未知错误 任何人都知道为什么会发生这种情况 我刚刚修复了它 卸载并重新安装了我的 NET Framework 版本 v4 0 然后 当我再次尝试启动 Vi
  • C 中的不透明(抽象)数据类型

    文件 api h include
  • Sublime Text 需要重新启动设置更改才能生效

    我的 Sublime Text 3 但也适用于 ST2 因为我在切换到 ST3 之前遇到了同样的问题 需要重新启动才能使任何设置更改生效 这种情况发生在办公室的 Mac Mini 上 但不会发生在我的 Macbook Pro 上 两者的设置
  • Android-Studio:错误:无法创建 Java 虚拟机

    我今天刚刚安装了Android studio 首先我必须为此 IDE 安装 jdk7 之后只有我能够启动 IDE 现在 当我尝试创建新项目时 出现错误 如下图所示 有人可以帮助我吗 我的身边缺少什么 就我而言 我更改了以下文件来修改虚拟机堆
  • 通过 C API 从字符串创建并调用 python 函数

    是否可以从字符串加载 python 函数 然后使用参数调用该函数并获取返回值 我正在使用 python C API 从我的 C 应用程序内部运行 python 代码 我可以使用以下命令从文件加载模块PyImport Import 从中获取一
  • 有 Yahoo 查询语言 (YQL) 的 .NET 示例吗?

    我想打一些简单的电话雅虎查询语言 YQL http developer yahoo com yql 有人在 NET 中实现过这个吗 这是我想从 NET 进行的查询 select MarketCapitalization from yahoo
  • Sammy 路由不工作

    我无法让 sammy js 路由按预期工作 我有以下 JavaScript function var app sammy main function this get function context context log start p
  • 硒未找到元素

    这是 HTML https www dropbox com s aiaw2u4j7dkmui2 Untitled 20picture png https www dropbox com s aiaw2u4j7dkmui2 Untitled
  • Newtonsoft.Json SerializeObject 不带转义反斜杠

    给出代码 dynamic foo new ExpandoObject foo Bar something string json Newtonsoft Json JsonConvert SerializeObject foo 输出如下 Ba
  • 在 JavaScript 中缩放到没有画布的光标

    我有一个 img 通过调整鼠标滚轮滚动来缩放transform scale 我希望缩放像 Google 地图一样 您可以缩放到鼠标光标所在的位置 而不是图像的中心 不过 我不想使用画布 只是为了学习体验 这也是我发现的其他问题并没有真正帮助
  • WSO2 Identity Server Service Pack 的来源

    WSO2 Identity Server 5 0 0 的 Service Pack 1 的源是否公开可用 我在哪里可以找到 SVN 存储库中的源代码 Service Pack 没有任何源代码 服务包是通过聚合为 WSO2 中的产品提供的补丁
  • Rails 中的 Kerberos 身份验证

    是否可以使用 kerberos 对 Rails 下的用户进行身份验证 是否有任何现有插件 最好是扩展 authlogic 的功能 来执行此操作 我希望其他人能够向我们展示一种纯粹的 Rails 方法来做到这一点 但在那之前 让事情顺利进行的
  • 开发cocos-lua游戏时,Android中string.find中文字符失败,PC上成功

    我尝试使用string find 中国 中 我开发cocos lua游戏时 在PC上成功 但在Android上失败 在安卓上 string find return nil 首先 我认为它们的编码可能不同 所以我尝试打印出它们的字节 Andr
  • 使用 `*((*(&array + 1)) - 1)` 获取自动数组的最后一个元素是否安全?

    假设我想获取大小未知的自动数组的最后一个元素 我知道我可以利用sizeof运算符来获取数组的大小并相应地获取最后一个元素 正在使用 array 1 1 safe Like char array SOME SIZE printf Last e
  • 从android中的地址获取纬度和经度

    我尝试从地址获取纬度和经度 问题是 当我只给出城市名称时 它会给出正确的纬度和经度 而当我给出完整的地址 如州 城市名称 街道号码 时 它会给出正确的纬度和经度没有给我正确的纬度和经度 感谢您的配合回复 我的代码是 String addre
  • Ant 任务检查数据库(连接)是否存在?

    ANT 是否有可能在不导致构建失败的情况下检查数据库 连接 是否存在 例如
  • 按 utc 日期而不是服务器日期滚动文件

    这是我的 log4net xml 文件
  • pyqt:如何从 QVBoxLayout 中删除元素?

    我想要一个多颜色选择小部件 我这样做的方式是有一个 按钮和一个最初为空的 vbox 当按下 时 它会向包含 按钮和 3 个旋转框的 vbox 添加一个 QHBoxLayout 当按下 按钮时 我希望该行消失 并且所有内容都恢复到添加该行之前
  • DLib:train_shape_predictor_ex.cpp

    我正在尝试通过执行来训练 Dlib 的形状预测器train dlib shape predictor ex cpp http dlib net train shape predictor ex cpp html on 海伦数据集 http
  • ng-content 选择绑定变量

    我正在尝试使用 Angular 2 创建一个表单生成器 一个非常基本的示例如下 this fields name Name type text name Age type number 但我也想支持自定义元素 例如 this fields