【发布时间】:2019-06-06 00:46:18
【问题描述】:
我需要编写一个通用函数,该函数将根据 JSON 中的条件启用/禁用按钮。
JSON:
{
PURCHASE_LIEN: {
LABEL: 'PURCHASE LIEN',
DISABLE: true,
CONDITION: [
{
ReviewPurchaseDecisionStatus: true,
PurchaseDecisionStatus: false
},
{
ReviewPurchaseDecisionStatus: true,
'ReviewPurchaseDecision.Status': 'NOT QUALIFIED'
}
]
},
NOT_QUALIFIED: {
LABEL: 'NOT QUALIFIED',
DISABLE: true,
CONDITION: [
{
ReviewPurchaseDecisionStatus: true,
PurchaseDecisionStatus: false
},
{
ReviewPurchaseDecisionStatus: true,
'ReviewPurchaseDecision.Status': 'PURCHASED'
}
]
}
}
在 JSON 中,我有两个按钮“PURCHASE_LIEN”和“NOT_QUALIFIED”。这两个函数都有基于条件的条件数组,按钮应使用“禁用”属性启用/禁用。
VALIDATION.SERVICE.TS
以下函数将根据对象 (selectedRow) 的条件设置按钮的 DISABLE 属性。
public disableButton(buttonContainer: any, buttonID: string, selectedRow: any) {
let status = true;
for (let i = 0; i < buttonContainer[buttonID]['CONDITION'].length; i++) {
const condition = buttonContainer[buttonID]['CONDITION'][i];
for (const conditionName in condition) {
if (condition[conditionName] !== selectedRow[condition]) {
status = false;
}
}
if (status) {
buttonContainer[buttonID].DISABLE = false;
break;
} else {
buttonContainer[buttonID].DISABLE = true;
}
}
return buttonContainer;
}
app.component.html
<div class="col-12 col-sm-6 col-md-4 col-lg-2">
<button class="btn btn-primary btn-semi-circle" (click)="showModal('Purchase')"
[disabled]="disableButton(buttonGroup, 'PURCHASE_LIEN', selectedRowData)">Purchase
Lien</button>
<!-- [disabled]="PURCHASE_LIEN_DISABLE" -->
</div>
<div class="col-12 col-sm-6 col-md-4 col-lg-2">
<button class="btn btn-danger btn-semi-circle" (click)="showModal('Not Qualified')"
[disabled]="disableButton(buttonGroup, 'NOT_QUALIFIED', selectedRowData)">Not
Qualified</button>
<!-- [disabled]="NOT_QUALIFIED_DISABLE" -->
</div>
app.component.ts
export class ReviewPurchaseDecisionComponent implements OnInit {
public buttonGroup: any = {
PURCHASE_LIEN: {
LABEL: 'PURCHASE LIEN',
DISABLE: true,
CONDITION: [
{
ReviewPurchaseDecisionStatus: true,
PurchaseDecisionStatus: false
},
{
ReviewPurchaseDecisionStatus: true,
'ReviewPurchaseDecision.Status': 'NOT QUALIFIED'
}
]
},
NOT_QUALIFIED: {
LABEL: 'NOT QUALIFIED',
DISABLE: true,
CONDITION: [
{
ReviewPurchaseDecisionStatus: true,
PurchaseDecisionStatus: false
},
{
ReviewPurchaseDecisionStatus: true,
'ReviewPurchaseDecision.Status': 'PURCHASED'
}
]
}
};
constructor(
public router: Router,
public validation: ValidationService,
private fb: FormBuilder,
private http: HttpHelperService,
private myMonitoringService: MyMonitoringService,
private authentication: AuthenticationService,
private sessionService: SessionService,
public dialogService: DialogServiceService,
private caseService: CaseService,
private cookieService: CookieService
) {}
disableButton(buttonContainer: any, buttonID: string, selectedRow: any) {
this.buttonGroup = this.validation.disableButton(
buttonContainer,
buttonID,
selectedRow
);
return this.buttonGroup[buttonID].DISABLE;
}
}
验证服务中的 disableButton 方法根据条件将 DISABLE 属性值更改为 true/false,但按钮不启用。它没有检测到更改
【问题讨论】:
-
你能创建
stackblitz吗? -
return buttonContainer;之前的控制台日志以查看布尔值。 -
我已经使用开发者控制台检查了对象,属性发生了变化,但 angular 没有检测到变化
-
我不是在问 DOM 操作。我只是想知道 Angular 是如何知道对象属性已更改的,以便 Angular 检测到它并更新按钮禁用属性
标签: javascript angular