Angular 如何根据嵌套组件对材质表进行排序

Angular 如何根据嵌套组件对材质表进行排序,angular,angular-material,Angular,Angular Material,app message action组件根据所选语言呈现已翻译的row.action。如何按此翻译字符串对表进行排序?它当前按row.action进行良好排序,但raw.action的值与嵌套组件呈现的字符串不同 <ng-container matColumnDef="action"> <th mat-header-cell *matHeaderCellDef mat-sort-header i18n>Action</th>

app message action组件根据所选语言呈现已翻译的row.action。如何按此翻译字符串对表进行排序?它当前按row.action进行良好排序,但raw.action的值与嵌套组件呈现的字符串不同

   <ng-container matColumnDef="action">
        <th mat-header-cell *matHeaderCellDef mat-sort-header i18n>Action</th>
        <td mat-cell *matCellDef="let row" width="60%">
          <app-message-action [deviceTypeId]="deviceTypeId" [key]="'action'" [action]="row.action"></app-message-action>
        </td>
   </ng-container>

行动
我试过:

 <table mat-table [dataSource]="dataSource" matSort matSortActive="action" matSortDirection="asc">


甚至考虑覆盖sortingDataAccessor,但运气不好。

这是我对嵌套对象的排序

例如,我按requestOwner的姓氏对其进行排序。因此,在“requestOwner”的情况下,我返回item.requestOwner.lastName。其他领域的情况也类似

this.dataSource.sortingDataAccessor = (item, property) => {
      switch (property) {
        case 'status': return item.statusId;
        case 'requestOwner': return item.requestOwner.lastName;
        case 'vehicles': return item.requestVehicles[0].vehicle.plateNumber;
        case 'driver': return item.requestVehicles[0].driver.lastName;
        case 'startDate': return item.requestVehicles[0].startDateTime;
        case 'endDate': return item.requestVehicles[0].endDateTime;
        case 'locations': return item.requestVehicles[0].routes[0].regionName;
        default: return item[property];
      }
    };
    this.dataSource.paginator = this.paginator;
    this.dataSource.sort = this.sort;
我的数据是这样的:

{
"requestId": 0,
"requestOwner": {
    "departmentId": 0,
    "email": "string",
    "firstName": "string",
    "lastName": "string",
    "personId": 0,
    "phoneNumber": "string",
    "userName": "string"
},
"requestVehicles": [
    {
        "driver": {
            "departmentId": 0,
            "email": "string",
            "firstName": "string",
            "lastName": "string",
            "personId": 0,
            "phoneNumber": "string",
            "userName": "string"
        },
        "endDateTime": "2019-03-25T09:29:42.097Z",
        "routes": [
            {
                "addressPointId": "string",
                "id": 0,
                "municipalityId": 0,
                "regionId": 0,
                "rvId": 0,
                "sequenceNumber": 0,
                "settlementId": 0
            }
        ],
        "vehicle": {
            "additionalInfo": "string",
            "currentDriver": {
                "departmentId": 0,
                "email": "string",
                "firstName": "string",
                "lastName": "string",
                "personId": 0,
                "phoneNumber": "string",
                "userName": "string"
            },
            "startDateTime": "2019-03-25T09:29:42.097Z",
        }
    ],
    "statusId": 0
}
还有这些是我的显示列:

  displayedColumns = ['status', 'requestOwner', 'vehicles', 'driver', 'startDate', 'endDate', 'locations', 'additionalInfo', 'priority'];

谢谢,但此解决方案适用于嵌套对象,但我对嵌套对象但嵌套组件没有问题。组件应用程序消息操作有3个输入:设备类型、消息键和消息操作,并根据一些JSON配置呈现已翻译的操作。。。我看不出如何使用你的解决方案。我的错。误解了这个问题。我最终去掉了内部组件并通过服务转换了操作,但我仍然认为必须有一个解决方案……也许您可以使用共享服务来传输数据。这里的第四种方法。是的,这就是我所做的,但我很好奇是否有一种嵌入组件的方法。。。