当前位置: 首页 > 知识库问答 >
问题:

当我从typescript传递条件时,ngIf和hidden不是绑定属性

华聪
2023-03-14

我正在通过解析 json 文件来创建动态表单。所以我需要根据条件绑定隐藏/ngIf。我正在从打字稿文件中传递条件,并且在 html 文件中使用同样的东西。以下是我的代码更改

product.component.ts

export class ProductComponent implements OnInit {

  condition : any;
  productForm : FormGroup;

constructor(productFormBuilder : FormBuilder) {
      this.productForm = productFormBuilder.group({
          'name' : ["", [Validators.required, Validators.minLength(5), Validators.maxLength(10)]],
          'test' :["",[]],
          'middleName':["",[]],
          'lastName':["",[]]

      });

      this.condition="!(this.productForm.get('test').value==='testing')";
   }

}

product.component.html

  <form [formGroup]="productForm" (submit)="onSubmit()">
  <div>
      <label>Name</label>
      <input type="text" formControlName="name" name="name" >
      <div *ngIf="productForm.controls['name'].invalid && (productForm.controls['name'].dirty || productForm.controls['name'].touched)">
        <div style="color:red" 
            *ngIf="productForm.controls['name'].errors.required">Name is required</div>
        <div style="color:red" 
            *ngIf="productForm.controls['name'].errors.minlength">Name is minimum of 5 characters</div> 
      </div>

  </div>
  <div>
      <label>Label</label>
      <input type='radio' formControlName='test' value='testing' name='test'> Testing
      <input type='radio' formControlName='test' value='overflow' name='test'> Overflow

  </div>
  <div  [hidden]= "!(this.productForm.get('test').value==='overflow')"> 
    <label>Overflow</label>
    <input type='text' formControlName='middleName' > 

</div>
<div *ngIf="condition">
        <div  >
                <label>Testing</label>
                <input type='text' formControlName='lastName' > 
            </div>
</div>
<div [hidden]="condition">
        <div  >
                <label>Testing</label>
                <input type='text' formControlName='lastName' > 
            </div>
</div>

 <button type="submit">Submit</button>

</form>

在我的模板文件中,我有一个名为“test”的单选按钮,我需要显示基于单选按钮选择的相应div。当我将条件直接放在模板文件中时,绑定是有效的,而当我从typescript中发送它并在模板文件中使用它时,同样的事情是无效的。ngIf*在页面加载时显示右div,但切换不起作用。

由于表单将通过解析json动态创建,我需要从typescript传递条件。

有人可以帮助我吗,我错过了什么。

共有1个答案

贾飞鸿
2023-03-14

首先,条件应该是布尔类型而不是字符串。
this.condition="!(this.productForm.get('test'). value==='测试')";应该替换为
this.condition=!(this.productForm.get('test'). value==='测试');其次,您在单选中缺少更改检测。最初,它已设置,但当您更改它时,您不会更新条件

 类似资料:
  • 问题内容: 我已经编写了angularjs指令。在该指令的模板中,我添加了一个ngIf指令,并在其中显示绑定到指令范围的输入。 经过大量的反复试验,我注意到ngIf指令导致更改输入文本时模型无法更新。如果我将其更改为ngShow,则一切正常。 我正在寻找这种差异的解释 我在这里创建了一个jsfiddle 问题答案: 之所以会这样,是因为ngIf创建了一个新的子作用域,因此,如果您想绑定到与其他输入

  • 我试图通过使用src属性的props路径来显示带有img标记的图像。 我试着用更改路径,用使用整个路径,在组件中添加,并且只传递文件名()作为道具。我总是显示默认的断开图像。在浏览器中检查时,路径看起来很好。当我直接显示图像时,我可以看到路径被解析为不同的路径

  • 在Servlet中设置值并使用RequestDispatcher在jsp中检索值 在test1Servlet中: request.setAttribute(“alpha”,alpha); 任何人请帮我解决这个问题。

  • 英文原文:http://emberjs.com/guides/components/passing-properties-to-a-component/ 默认情况下,组件不能访问模板作用域下的属性。 例如,假设有一个用于显示一篇博客的blog-post组件: 1 2 3 4 <script type="text/x-handlebars" id="components/blog-post">

  • 想改进这个问题吗 通过编辑此帖子,更新问题,以便用事实和引用来回答。 考虑以下代码示例: 实现相同功能的另一种方法是: 想知道这两种方式应该用哪一种的具体原因,为什么?

  • 我对Angular的Karma Jasmine测试抱怨说 错误:“无法绑定到'ngIf',因为它不是'p'的已知属性。” 当应用程序本身出现此类错误时,修复方法是确保将添加到应用程序模块()的。我确实有这个意思(所以这个问题不是关于“不能绑定到'ngXXX'的规范问题的重复,因为它不是'YYY'的已知属性”)。 这是我的测试设置代码: 我的超文本标记语言模板显示,而不是或错别字,这是该错误消息的另