Задать вопрос
Ответы пользователя по тегу Angular
  • Как найти максимальную дату из массива?

    @mrhat24
    Возможно как-то так, но я не тестил

    // шаблон
    <div *ngFor="let user of reportsWithUser$|async">
        {{user.name}}
    </div>
    
    //компонент
    import {Observable} from "rxjs";
    import {map, switchMap} from "rxjs/operators";
    import * as _ from 'underscore';
    
    interface User {
        user_id: number;
        name: string;
        date: string;
    }
    interface Report {
        report_date: string;
        users_id: number;
    }
    interface UserWithReports extends User {
        reports: Report[];
        reportWithMaxDate: Report;
    }
    
    export function assignReportToUser(user: User, reports: Report[]): UserWithReports {
        const repFiltered = reports.filter(report => report.report_date >= user.date);
        return {...user, reports: repFiltered.filter(report => report.users_id === user.user_id), reportWithMaxDate: _.max(repFiltered, (r) => r.report_date)};
    }
    
    export class AnyComponent {
        reportsWithUser$: Observable<UserWithReports[]>;
        constructor(
            public reportsService: any,
            public usersService: any
        )  {
            this.reportsWithUser$ = this.reportsService.fetch().pipe(
                switchMap((reports: Report[]) => this.usersService.fetch().pipe(
                        map((users: User[]) => {
                            return users.map(user => assignReportToUser(user, reports)).filter((user) => user.reportWithMaxDate !== null);
                        })
                    )
                )
            )
        }
    }
    Ответ написан
    Комментировать
  • Как изменить URL без перезагрузки в Ангулар 6?

    @mrhat24
    Нужно добавить в app.module.ts RouterModule, как здесь, и можно в шаблоне добавлять ссылки:
    <a routerLink="/"
       [queryParams]="{ userId: '123' }">
      Users
    </a>

    или
    <a routerLink="/userId/123"
       queryParamsHandling="merge">
      Users
    </a>

    или
    в компоненте
    import {Router} from "@angular/router";
    @Component()
    export class AppComponent implements OnInit {
       constructor(
            private router: Router
        ){}
        ngOnInit() {
            this.router.navigateByUrl("/userId/123");
            // или
            this.router.navigateByUrl({queryParams: {userId: 123}});
        }
    }

    Не уверен в работоспособности последнего, писал на одном дыхании, но судя по документации должно работать.
    Вот документация: https://angular.io/guide/router
    Ответ написан
    Комментировать