#angular #spring #ag-grid #ag-grid-angular
Вопрос:
Это мой первый раз, когда я использую сетку ag, и я пытаюсь отобразить всю информацию о пользователе в сетке ag, и я не могу отобразить роль каждого из них. Роли хранятся в массиве, поскольку каждый пользователь может получить одну или несколько ролей. Было бы здорово, если бы вы могли указать, чего мне здесь не хватает, потому что я застрял на некоторое время.
итак, это модель моего пользователя в Angular :
import { Role } from "../../accounts-mangament/model/role";
export class UserDisplay {
id: number;
name : string ;
username : string;
email : string ;
roles : Role[];
isDeactivated : number ;
createdAt : Date ;
createdBy : string ;
}
и это модель пользователя в SpringBoot
@Entity
@Table(name = "users", uniqueConstraints = { @UniqueConstraint(columnNames = { "username" }), @UniqueConstraint(columnNames = {"email"})})
public class User extends Auditable<String> {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String username;
@NaturalId
private String email;
private String password;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();
private int isActive; //now
private String confirmationToken;
private String resetToken;
private int isDeactivated;
}
Мой угловой сервис для пользователей
@Injectable({
providedIn: 'root'
})
export class UserServiceService {
private baseURL = environment.apiUrl ;
constructor(private http: HttpClient) { }
getUserList () : Observable <UserDisplay[]> {
return this.http.get<any>(`${this.baseURL}api/USERS`);
}
}
Мой Компонент :
columnDefs = [
{ headerName: 'Name', field: 'name',width: 200, sortable: true, filter: true, checkboxSelection: checkboxSelection, headerCheckboxSelection: headerCheckboxSelection },
{ headerName: 'UserName', field: 'username', width: 200, sortable: true, filter: true },
{ headerName: 'Address mail', field: 'email' ,width: 200, sortable: true, filter: true },
{ headerName: 'Account Status', field: 'isDeactivated', width: 150,sortable: true, filter: true ,editable: true, cellEditor: 'agSelectCellEditor', cellEditorParams: { values: accountstatus },
filterParams: { valueFormatter: function (params) { return lookupValue(accountstatusMappings, params.value);}, },
valueFormatter: function (params) { return lookupValue(accountstatusMappings, params.value);},
},
{ headerName: 'Global Role', field: 'roles', width: 150,sortable: true, filter: true ,editable: true, cellEditor: 'agSelectCellEditor', cellEditorParams: { values: role },
filterParams: { valueFormatter: function (params) { return lookupValue(roleMappings, params.value);}, },
valueFormatter: function (params) { return lookupValue(roleMappings, params.value);},
},
{ headerName: 'Creation Date', field: 'createdAt', width: 250, sortable: true, filter: true },
{ headerName: 'Created By', field: 'createdBy', width: 150, sortable: true, filter: true }
];
rowData : UserDisplay [] ;
...
ngOnInit(): void {
this.userServ.getUserList().subscribe(
data => { this.rowData = data;
console.log("data",this.rowData);
},
error => console.error(error));
}
....
и это то, что я получаю в качестве результата для роли
и это структура данных пользователя
На данный момент я просто добавил этот код для отображения первой назначенной роли :
Определитель значений: (параметры) => параметры.данные.роли[0].имя
таким образом, код стал :
columnDefs = [
....
{ headerName: 'Global Role', field: 'roles', valueGetter: (params) => params.data.roles[0].name ,width: 150,sortable: true, filter: true ,editable: true, cellEditor: 'agSelectCellEditor', cellEditorParams: { values: role },
filterParams: { valueFormatter: function (params) { return lookupValue(roleMappings, params.value);}, },
valueFormatter: function (params) { return lookupValue(roleMappings, params.value);},
},
... ];
Комментарии:
1. что такое значение поиска?
Ответ №1:
вы можете отобразить весь список, отформатировав его с помощью valuegetter.
valueGetter: (params) => params.data.roles.join()
Я думаю, что установить фильтр столбцов было бы более уместно для фильтрации этого столбца.