如何在角度4中以动态形式设置ngIf动态条件

2024-02-22

我正在创建一个动态表单,在其中根据 JSON 的响应动态填充字段。

Eg:-

[{
  "type":"text",
  "required":true,
  "minlength": 3,
  "maxlength":5,
  "name":"fname",
  "visibility":true
},
{
  "type":"text",
  "required":true,
  "minlength": 3,
  "maxlength":5,
  "name":"lname",
  "visibility":"fname == 'abc' || fname == 'xyz'"
},
{
  "type":"text",
  "required":true,
  "minlength": 3,
  "maxlength":5,
  "name":"fid",
  "visibility":true
},
{
  "type":"text",
  "required":true,
  "minlength": 3,
  "maxlength":5,
  "name":"lid",
  "visibility":"fid == 1 || fid == 4"
}]

我有一个用例,其中第二个字段仅当第一个字段应具有值“abc”或“xyz”时才可见(条件写在 JSON 属性中)。如何动态实现这一点?


Create evaluation组件中的方法:

 isVisible(value){
    //console.log(eval(value));
    return eval(value); 
  }

并在模板中这样调用它:

<div *ngIf="isVisible(question.visibility)">
        <label [attr.for]="question.key">{{question.label}}</label>
        <div [ngSwitch]="question.controlType">
            <input [name]="question.key" *ngSwitchCase="'textbox'" [formControlName]="question.key" [id]="question.key" [type]="question.type">

            <select [id]="question.key" *ngSwitchCase="'dropdown'" [formControlName]="question.key">
      <option *ngFor="let opt of question.options" [value]="opt.key">{{opt.value}}</option>
    </select>
        </div>
        <div class="errorMessage" *ngIf="!isValid">{{question.label}} is required</div>
    </div>

Your json文件将类似于:

 ...
 new TextboxQuestion({
        key: 'firstName',
        label: 'First name',
        value: 'Bombasto',
        required: true,
        order: 1, 
        visibility: 'true'
      }),

      new TextboxQuestion({
        key: 'emailAddress',
        label: 'Email',
        type: 'email',
        order: 2,
        visibility: 'this.form.get("firstName").value ==="abc"'
      })

visibility: 'this.form.get("firstName").value ==="abc"',如你所见,你应该写在json像往常一样在组件类逻辑中,因为它将在组件上下文中运行

代码示例 https://stackblitz.com/edit/angular-dynamic-forms-with-conditions

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

如何在角度4中以动态形式设置ngIf动态条件 的相关文章

随机推荐

  • Microsoft Teams 中的 ActionTypes.MessageBack 存在问题?

    我正在使用带有 C 的 Bot Builder 3 11 版本 我有一个 ActionTypes MessageBack 类型的操作按钮 具有以下属性 cardActions Add new CardAction Type ActionTy
  • CSS !important 声明在 Outlook 2007 中不起作用

    我想创建一个锚颜色为红色的电子邮件模板 它应该是 重要的声明以避免继承其他样式值 不幸的是 它在 Outlook 2007 2010 中无法正确呈现 有人有类似的经历吗 与 Outlook 中的 important 标记支持相关的问题 我在
  • 如何同步两个View的drawable状态

    在 Android 中 我有一个 EditText 和一个位于 EditText 旁边的按钮 每当我按下一个按钮时 我都希望另一个也以相同的状态出现 我尝试将 android clickable true 放在封闭布局上 将 android
  • 对角化符号矩阵

    我需要用 python 对角化一个符号矩阵 在 Mathematica 中这可以很容易地完成 但是当使用模块时numpy linalg我遇到问题 为了具体起见 请考虑矩阵 2 x x 3 where x是一个符号变量 我想我遇到了问题 因为
  • 为 UIFont 定义宏不起作用

    我想定义一个宏来统一我的应用程序中的所有字体 define EXO REGULAR FONT size UIFont fontWithName Exo Regular size size 而不是像这样使用这个宏 myLabel font E
  • 如何在 Espresso 中的 RecyclerView 内部断言?

    我正在使用 espresso contrib 来执行操作RecyclerView 并且它应该正常工作 例如 click on first item onView withId R id recycler view perform Recyc
  • C# 生产质量线程安全内存中 LRU 缓存是否过期?

    这也许就像求棒上的月亮一样 但是是否有 C 生产质量的线程安全内存中 LRU 缓存 带过期 或者有人有最佳实践想法来实现同样的事情吗 LRU 是 最近最少使用 http en wikipedia org wiki Cache algorit
  • ListView 中每个项目的单独首选项?

    我正在创建我的第一个 Android 应用程序 或者无论如何都在尝试 但我有一个问题 我似乎找不到答案 我想允许用户为列表视图中的每个项目输入一组单独的首选项 我的 PreferenceScreen 正在工作 但它为每个项目维护相同的首选项
  • 为什么 scanf 中需要 %hd ?

    我创建了一个非常简单的程序 带有菜单 取一个值 然后将其记忆到 局部变量值 最后与 第二个选项是程序打印该值 我的问题是 为什么只有添加 h 程序才能运行 到 scanf 参数 换句话说 存在什么样的关系 scanf 和我的本地 int 值
  • Sprite Kit:大量带有 Bit Blitting 的 sprite(1000+)

    我正在尝试使用 SpriteKit 创建一个场景 其中包含数千个精灵 500 2000 每个精灵只是一个 1x1 的白色像素 甚至不需要为它们使用纹理 立即将这么多精灵直接添加到场景中是不可能的 或者至少我这么认为 在 iPhone 6 上
  • 玩法框架2:在route中使用Array[String]

    我想生成一个像这样的网址 照片 标签 标签1 标签2 标签3 路线文件 GET photo controllers Photos list tags Array String 我在播放控制台中收到此错误 找不到 Array String 类
  • 尝试使用 ServiceController 时出现错误 MSB4062

    我在 x64 计算机上使用 Visual Studio 2010 和 TFS 2010 我正在尝试在我的构建中使用 MSBuild 社区任务目标 该目标存在于源代码管理中 因此 在我的 csproj 文件中 我导入该特定目标 但现在出现以下
  • 在项目的层次结构中找不到新元素

    我正在尝试为 Xamarin 应用程序创建一个简单的页面 但完全无法继续执行最基本的步骤 我从项目存储库中检查分支 并尝试添加新文件 当我这样做时 右键单击文件夹 添加 gt 新项目 gt 内容页面 我收到此错误 它实际上创建了 xaml
  • 在使用像数组这样的变量之前分配 array()

    我试图找到一个合适的解释性标题 但我找不到 我将尝试解释我在这里问的问题 通常 如果您不将空数组分配给变量 则可以开始为索引分配值 如下所示 hello world Hello World echo hello world 但我总是遇到这样
  • 从工作线程使用 Flask SQLAlchemy

    我有一个 python 应用程序使用烧瓶宁静 http flask restful cn readthedocs io en 0 3 5也Flask SQLAlchemy http flask sqlalchemy pocoo org 2
  • Bootstrap 中缺少可见-** 和隐藏-**

    在Bootstrap v3中我经常使用hidden 类结合clearfix来控制不同屏幕宽度下的多列布局 例如 我可以在一个 DIV 中组合多个 hide 以使我的多列在不同的屏幕宽度下正确显示 举个例子 如果我想显示多行产品照片 在较大的
  • Common Lisp:如何使用条件拼接在宏中构建列表?

    我们假设 defmacro testing optional var list this is when consp var a list 当被调用时 gt testing 2 THIS IS gt testing list 1 2 THI
  • 从 asp.net/C# 查询 MUMPS

    有谁知道如何使用 C 从 MUMPS 数据库查询而不使用 KBSQL ODBC 我们需要从 MUMPS 数据库 Mckesson STAR Patient care 进行查询 当我们使用 KBSQL 时 它仅限于 6 个并发用户 因此我们尝
  • 如何回收/重用 CUDA 线程

    在 CUDA 中 如何为内核中的所有线程创建一个等待的屏障 直到CPU向该障碍发送一个信号 表明继续进行是安全的 有帮助的 我想避免启动 CUDA 内核的开销 有两种类型的开销需要避免 1 在 X 块和 Y 线程上简单启动内核的成本 以及
  • 如何在角度4中以动态形式设置ngIf动态条件

    我正在创建一个动态表单 在其中根据 JSON 的响应动态填充字段 Eg type text required true minlength 3 maxlength 5 name fname visibility true type text