【问题标题】:Compound If statement not evaluating to true Angular复合 If 语句未评估为真正的 Angular
【发布时间】:2018-09-25 10:26:21
【问题描述】:

我有以下代码块:

<tbody>
    <tr *ngFor="let row of model">
        <ng-container *ngFor="let columnDataName of columnDataNames">
            <td *ngIf="modelConfig[columnDataName] && modelConfig[columnDataName].isVisible">
                <ng-template *ngIf="showRowTextBox && columnDataName === conditionalInputName || columnDataName === conditionCheckBoxName; else otherColumns">
                    <ng-container *ngIf="columnDataName === conditionalInputName">
                        <input type="text" placeholder="Enter text here" [hidden]="!chkEnabled?.checked" (focusout)="onTextBoxFocusOut(row[primaryKeyColumnName], $event)" />
                    </ng-container>
                    <ng-container *ngIf="columnDataName === conditionCheckBoxName">
                        <input type="checkbox" [checked]="chkAll?.checked" #chkEnabled ngModel />
                    </ng-container>
                </ng-template>
                <ng-template #otherColumns>
                    <ng-container *ngIf="modelConfig[columnDataName].isDate;">
                        {{ row[columnDataName] | date:'d MMM yyyy' }}
                    </ng-container>
                    <ng-container *ngIf="modelConfig[columnDataName].isBoolean;">
                        <tfg-toggle onText="Yes" offText="No" [disabled]="true" [value]="row[columnDataName]"></tfg-toggle>
                    </ng-container>
                    <ng-container *ngIf="!modelConfig[columnDataName].isBoolean && !modelConfig[columnDataName].isDate">
                        {{ row[columnDataName] }}
                    </ng-container>
                </ng-template>
            </td>
        </ng-container>
        <td *ngFor="let buttonColumnName of buttonColumnNames">
            <button (click)="executeButtonFunction(row[primaryKeyColumnName], buttonColumnName)" class="btn" [ngClass]="buttonColumnName === 'Delete' ? 'btn-danger' : 'btn-primary'">{{buttonColumnName}}</button>
        </td>
        <!-- <ng-container *ngIf="showRowTextBox">
            <td>
              <input type="text" placeholder="Enter text here" [hidden]="!chkEnabled.checked" (focusout)="onTextBoxFocusOut(row[primaryKeyColumnName], $event)"/>
            </td>
            <td>
              <input type="checkbox" [checked]="chkAll?.checked" #chkEnabled ngModel/>
            </td>
          </ng-container> -->
    </tr>
</tbody>

页面未按预期呈现,因为下面的 if 语句未评估为 true。

<ng-template *ngIf="showRowTextBox && columnDataName === conditionalInputName || columnDataName === conditionCheckBoxName; else otherColumns">

ShowRowTextBox 设置为 true,在迭代的某个时刻,columnDataName 将等于 conditionalInputNamecondtionCheckBoxName

我的逻辑不正确吗?

【问题讨论】:

  • 这是您要找的东西吗?
  • @Neyxo 我已尝试按照您的建议格式化我的声明,但它仍然评估为假
  • @Neyxo 这真的会有所作为吗? true &amp;&amp; false || true 将提供与 true &amp;&amp; (false || true) 相同的输出。如果交换 OR 条件,则相同。
  • @vlaz 对,有道理。我没有想到优先级。

标签: javascript angular if-statement


【解决方案1】:

参考this文章,我将我的标记更改如下:

<tbody>
    <tr *ngFor="let row of model">
      <ng-container *ngFor="let columnDataName of columnDataNames">
        <td *ngIf="modelConfig[columnDataName] && modelConfig[columnDataName].isVisible">
          <ng-container *ngIf="showRowTextBox && (columnDataName === conditionalInputName || columnDataName === conditionCheckBoxName); else otherColumns">
            <ng-container *ngIf="columnDataName === conditionalInputName">
              <input type="text" placeholder="Enter text here" [hidden]="!chkEnabled?.checked" (focusout)="onTextBoxFocusOut(row[primaryKeyColumnName], $event)"/>
            </ng-container>
            <ng-container *ngIf="columnDataName === conditionCheckBoxName">
              <input type="checkbox" #chkEnabled ngModel/>
            </ng-container>
          </ng-container>
          <ng-template #otherColumns>
            <ng-container *ngIf="modelConfig[columnDataName].isDate;">
              {{ row[columnDataName] | date:'d MMM yyyy' }}
            </ng-container>
            <ng-container *ngIf="modelConfig[columnDataName].isBoolean;">
              <tfg-toggle onText="Yes" offText="No" [disabled]="true" [value]="row[columnDataName]"></tfg-toggle>
            </ng-container>
            <ng-container *ngIf="!modelConfig[columnDataName].isBoolean && !modelConfig[columnDataName].isDate">
              {{ row[columnDataName] }}
            </ng-container>
          </ng-template>
        </td>
      </ng-container>
      <td *ngFor="let buttonColumnName of buttonColumnNames">
        <button (click)="executeButtonFunction(row[primaryKeyColumnName], buttonColumnName)" class="btn" [ngClass]="buttonColumnName === 'Delete' ? 'btn-danger' : 'btn-primary'">{{buttonColumnName}}</button>
      </td>
      <!-- <ng-container *ngIf="showRowTextBox">
        <td>
          <input type="text" placeholder="Enter text here" [hidden]="!chkEnabled.checked" (focusout)="onTextBoxFocusOut(row[primaryKeyColumnName], $event)"/>
        </td>
        <td>
          <input type="checkbox" [checked]="chkAll?.checked" #chkEnabled ngModel/>
        </td>
      </ng-container> -->
    </tr>
  </tbody>

【讨论】:

  • 是的,将第一个 替换为 似乎解决了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
相关资源
最近更新 更多