Angular 6
у меня в шаблоне есть сетка WIJMO. Эта сетка извлекается из таблицы базы данных. Каждая строка сетки должна иметь либо кнопку delete
, либо кнопку un-delete
, в зависимости от *ngIf else
:
<wj-flex-grid>
<wj-flex-grid-column [header]="'ID'" [binding]="'ID'"></wj-flex-grid-column>
<wj-flex-grid-column [header]="'deleted'" [binding]="'deleted'"></wj-flex-grid-column>
<wj-flex-grid-column [header]="'delete/undelete buttons'" [binding]="'buttons'">
<button *ngIf="!deleted; else unDeleted">Delete</button>
<ng-template #unDeleted>
<button>Un-Delete</button>
</ng-template>
</wj-flex-grid-column>
</wj-flex-grid>
Моя проблема заключается в установке этого свойства deleted
в файле .ts. Мне нужно установить и прочитать это свойство несколько раз AKA для каждой строки таблицы, но *ngIf
хочет использовать его только после того, как оно было определено в последний раз. Итак, для моего машинописного текста, который использует for loop
для каждого элемента данных и устанавливает для свойства deleted
значение true или false в зависимости от столбца базы данных, если последняя строка сетки помечена как удаленная в базе данных, тогда все кнопки будут отображать undelete
и наоборот:
export class myComponent extends WjFlexGridParent implements OnChanges, OnInit {
/////// deleted property //////
////// *ngIf only likes to read this after the last time it is defined //////
public deleted: boolean;
loadData() {
this.myDatabaseService.get(this.myApiPath)
.subscribe
(
data => {
this.setCollectionView(data);
this.m_collectionView.trackChanges = true;
/////// delete/undelete logic //////
for (var i = 0; i < data.length; i++) {
if (data[i].deleted == null) {
this.deleted = false;
}
else if (data[i].deleted !== null) {
this.deleted = true;
}
}
errorCode => {
// this.statusMessage = "";
}
}
);
}
}
Как я могу заставить *ngIf
читать это свойство после каждого его обновления?
*ngFor
для создания строк? Я не уверен, что полностью понимаю, но вам нужен массив флагов удаления, по одному для каждой строки. - person Aragorn   schedule 28.11.2018*ngFor
— WIJMO использует одну строку кода для генерации строк, которые я исключил выше. Похоже, что*ngIf
считывает свойствоdeleted
только после завершенияfor loop
. Таким образом, независимо от того, что последняя строка устанавливает для свойстваdeleted
, это то, что*ngIf
использует для каждой строки. - person Kyle Vassella   schedule 28.11.2018this.deleted
на каждой итерации. Что именно должно содержать это значение? - person Jeto   schedule 28.11.2018*ngIf
будет читать свойство на каждой итерации. Свойствоdeleted
является логическим значением — true или false. Мы никогда на самом деле не удаляем строки из нашей базы данных — вместо этого мы помечаем столбец базы данных Deleted либо цифройnull
(не удалено), либо числомID
(удалено). Таким образом, если администратору нужно «восстановить» строку, он может это сделать. - person Kyle Vassella   schedule 28.11.2018this.setCollectionView(data);
. Это происходит от родительского класса.setCollectionView
определяется в родительском классе как:setCollectionView(p_data) { this.m_collectionView = new wjcCore.CollectionView(p_data); }
- person Kyle Vassella   schedule 28.11.2018WIJMO
привязывается к строке базы данных через атрибут[binding]
. - person Kyle Vassella   schedule 28.11.2018*ngIf
сможет привязываться к свойству / ключу .deleted каждой строкиdata
.data[i].deleted
в данном случае — это значение столбца Deleted в базе данных. - person Kyle Vassella   schedule 28.11.2018*ngIf
мог читать свойство каждый раз, когда оно перезаписывается. Возможно, мне нужно переместить свойство или вообще не использовать*ngIf
? - person Kyle Vassella   schedule 28.11.2018