Angular 使用*ngIf,按钮将以角度消失

Angular 使用*ngIf,按钮将以角度消失,angular,typescript,datatable,angular-material,row,Angular,Typescript,Datatable,Angular Material,Row,我试图使用按钮将行添加到现有材质表中。但是,当我使用*ngIf时,按钮不会呈现 HTML <button mat-raised-button color="accent" (click)="onAddRow()" *ngIf="addForm.get('rows')">Add</button>

我试图使用按钮将行添加到现有材质表中。但是,当我使用
*ngIf
时,按钮不会呈现

HTML

 <button mat-raised-button color="accent" 
                           (click)="onAddRow()" 
                           *ngIf="addForm.get('rows')">Add</button>  
  

ngIf
需要一个布尔值

如果传递一个方法,将使用该方法的稳定返回值。如果该值不是布尔值,则必须为truthy才能呈现元素

如果希望从方法返回一个项目数组,可以使用
length
属性作为truthy值。如果数组中没有项,则不会显示元素

 <button mat-raised-button color="accent" 
                           (click)="onAddRow()" 
                           *ngIf="addForm.get('rows').length">Add</button> 
添加

ngIf
需要一个布尔值

如果传递一个方法,将使用该方法的稳定返回值。如果该值不是布尔值,则必须为truthy才能呈现元素

如果希望从方法返回一个项目数组,可以使用
length
属性作为truthy值。如果数组中没有项,则不会显示元素

 <button mat-raised-button color="accent" 
                           (click)="onAddRow()" 
                           *ngIf="addForm.get('rows').length">Add</button> 
添加

您的问题不在于按钮。这是因为formArray控件是在表单之外创建的。因此,当你要求它的时候,什么也不会得到回报。因此,如果返回值未定义,ngIf不允许其可见

按如下所示更改构造函数

constructor(private fb: FormBuilder) { 

    this.addForm = this.fb.group({
        project: [null ]
    });
    this.addForm.addControl("rows", new FormArray([]));
}

你的问题不在于按钮。这是因为formArray控件是在表单之外创建的。因此,当你要求它的时候,什么也不会得到回报。因此,如果返回值未定义,ngIf不允许其可见

按如下所示更改构造函数

constructor(private fb: FormBuilder) { 

    this.addForm = this.fb.group({
        project: [null ]
    });
    this.addForm.addControl("rows", new FormArray([]));
}

您不能执行addform.get('rows'),您的addform不包含行,rows form数组不在addform中两者都是不同的您不能执行addform.get('rows'),您的addform不包含行,rows form数组不在addform中两者都是不同的按钮本身在我添加ngif时不呈现。因此,添加您建议的内容并没有改善。它不会呈现,因为addForm.get('rows')不会返回真实的内容。这就是为什么我建议转换为FormArray我尝试了这两个选项,但恐怕没有解决。请检查更新的答案。谢谢,它已经解决了。当我添加ngif时,按钮本身不会呈现。因此,添加您建议的内容并没有改善。它不会呈现,因为addForm.get('rows')不会返回真实的内容。这就是为什么我建议转换为FormArray。我尝试了这两个选项,但恐怕没有解决。请检查更新的答案。谢谢,它已经解决了。添加ngif时按钮本身不会呈现。添加ngif时按钮本身不会呈现。