【问题标题】:angular or html how to display a template by a condition角度或html如何按条件显示模板
【发布时间】:2018-10-31 10:51:21
【问题描述】:

我是 Angular 和 html 的新手 - 这应该是一个简单的问题,但我找不到答案 我有一个表格和一个保存按钮,一旦用户单击它,表格中的值需要被禁用 - 我正在使用带有以下代码的 primeNg 表格

<ng-template pTemplate="body" let-category let-index="rowIndex">
    <tr [pSelectableRow]="category">
      <div *ngIf="isEditable  then editTemplate  else saveTemplate">
          <td pEditableColumn #editTemplate>
          <p-cellEditor>
            <ng-template pTemplate="input">
              <input pInputText type="text" [(ngModel)]="category.categoryName">
            </ng-template>
            <ng-template pTemplate="output">
              {{category.categoryName}}
            </ng-template>
          </p-cellEditor>
        </td>
          <td #saveTemplate>{{category.categoryName}}</td>
      </div>

      <!-- <td>{{category.categoryName}}</td> -->
      <td>{{category.effectiveDate | date: 'dd/MM/yyyy' }}</td>
      <td *ngIf="category.questions.length else changeNullToZero">
        {{category.questions.length}}
      </td>
      <td>
        <button type="button" label="Remove" icon="pi pi-check" 
                (click)="confirmDeleteCategory(categoriesList[index])"
          pButton></button>
      </td>
      <ng-template #changeNullToZero>
        <td>0</td>
      </ng-template>
    </tr>
</ng-template>

我希望一旦单击“保存”按钮,值将被禁用 我试图为 2 个模板( editTemplate 和 saveTemplate )提供别名并检查 isEditable 的值 - 但我做错了一些事情...... 请注意,当我使用 ngIf 删除 div 并放置 EditTample 部分时

<div *ngIf="isEditable ; then editTemplate ; else saveTemplate">

这些字段是可编辑的,如果我只是把

<td>{{category.categoryName}}</td>

该字段不可编辑,仅表示 if 部分错误

【问题讨论】:

    标签: html angular


    【解决方案1】:
    1. 将您的td 内容包装在ng-template

    2. 将 tr 部分中的 div 替换为 ng-container

     <ng-template pTemplate="body" let-category let-index="rowIndex">
        <tr [pSelectableRow]="category">
            <ng-container *ngTemplateOutlet="isEditable ? editTemplate : saveTemplate ; context: {category : category}">
        
            </ng-container>
        
        <!-- <td>{{category.categoryName}}</td> -->
        <td>{{category.effectiveDate | date: 'dd/MM/yyyy' }}</td>
        <td *ngIf="category.questions.length else changeNullToZero ">{{category.questions.length}}</td>
        <td>
            <button type="button" label="Remove" icon="pi pi-check" (click)="confirmDeleteCategory(categoriesList[index])"
                    pButton></button>
        </td>
        <ng-template #changeNullToZero>
            <td>0</td>
        </ng-template>
        </tr>
        </ng-template>
        
        <ng-template  #editTemplate let-category="category"> 
            <td pEditableColumn>
            <p-cellEditor>
                <ng-template pTemplate="input">
                    <input pInputText type="text" [(ngModel)]="category.categoryName">
                </ng-template>
                <ng-template pTemplate="output">
                    {{category.categoryName}}
                </ng-template>
            </p-cellEditor>
        </td>
        </ng-template>
        
        <ng-template  #editTemplate let-category="category"> 
            <td #saveTemplate>{{category.categoryName}}</td>
        </ng-template>
    

    【讨论】:

    • 谢谢但它不起作用 - 现在我根本看不到列值(我试图玩这个但仍然失败)
    • 我只是将 ng-template 移到外面并定义了模板的上下文。如果现在有帮助,请检查答案。这是 ref 的示例示例 - stackblitz.com/edit/angular-ngif-else-fku8pb
    猜你喜欢
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 2016-04-17
    • 1970-01-01
    相关资源
    最近更新 更多