我有一个下拉列表,当我使用它时它可以工作,但它有两个问题:
- 如果我刷新,则下拉菜单中的值为空
- 如果我通过URI访问链接,则下拉菜单为空
我基本上想根据我所在的顺序来保留这个名字.想象一下,在下拉列表中有多个订单, Select 一个就会转到该页面.
// Topbar:
export class AppTopbarComponent implements OnInit {
items?: MenuItem[];
orders: Order[] = [];
filteredOrders: any[] = [];
selectedOrder: any[] = [];
displayRoutes: string[] = ['/order'];
constructor(
public appMain: AppMainComponent,
private ordersService: OrderService,
private router: Router,
private orderSelectionService: OrderSelectionService
) {}
ngOnInit(): void {
this.ordersService.getAllOrders().subscribe((orders) => {
this.orders = orders;
});
this.router.events.subscribe((event) => {
if (event instanceof NavigationEnd) {
const shouldDisplayDropdown = this.displayRoutes.some((route) => event.url.startsWith(route));
this.selectedOrder = shouldDisplayDropdown ? this.selectedOrder : [];
}
});
this.orderSelectionService.selectedOrderName$.subscribe((selectedOrderName) => {
this.selectedOrder = selectedOrderName;
});
}
onOrderSelect(event: any) {
const selectedOrderId = event.Id;
this.orderSelectionService.setSelectedOrderName(event || []);
this.router.navigate(['/order', selectedOrderId, 'home']);
}
}
// Service:
@Injectable({
providedIn: 'root',
})
export class OrderSelectionService {
private selectedOrderSource = new BehaviorSubject<any[]>([]);
selectedOrderName$: Observable<any[]> = this.selectedOrderSource.asObservable();
setSelectedOrderName(orderName: any[]) {
this.selectedOrderSource.next(orderName);
}
}
到目前为止,我一直在设法弄到这条路由.
this.activatedRoute.params.subscribe((params) => {
console.log('Route Params:', params);
const selectedOrderId = params['id'];
this.selectedOrder = this.orders.find((order) => order.Id === selectedOrderId) || [];
});
但它返回未定义的.
只是需要一些帮助来找出做到这一点的最佳方法.DisplayRoutes,这样做的方法是在不在特定路由上时重置下拉列表.