Angular 如何设置不同管线的组件属性?
我的Angular应用程序中有一个top nav组件,在其中三条路线中,我必须在该组件中显示购物车,直到现在,我使用的是Behavior Subject服务,当我像在产品路线中一样导航时,我将其设置为true,然后在top nav中检查是否为true,我必须显示购物车 但现在我必须找到另一种方法,top nav组件中的某些东西可以检测我是否在“产品”路线中显示购物车,或者如果我在“商店”路线中隐藏购物车,因为我在使用重用路线,并且我无法将导航上的行为主题设置回“产品” 以下哪种方法最好 在top nav的构造器中,我有以下内容:Angular 如何设置不同管线的组件属性?,angular,Angular,我的Angular应用程序中有一个top nav组件,在其中三条路线中,我必须在该组件中显示购物车,直到现在,我使用的是Behavior Subject服务,当我像在产品路线中一样导航时,我将其设置为true,然后在top nav中检查是否为true,我必须显示购物车 但现在我必须找到另一种方法,top nav组件中的某些东西可以检测我是否在“产品”路线中显示购物车,或者如果我在“商店”路线中隐藏购物车,因为我在使用重用路线,并且我无法将导航上的行为主题设置回“产品” 以下哪种方法最好 在top
cartService.isCartEnabled.subscribe((data) => (this.cart = data));
然后在html中,我正在检查购物车是否为
true
我正在显示购物车图标。您可以向路线添加属性,然后使用路线守卫在导航时设置属性
下面是有关配置路由属性的详细信息
将具有某些属性的数据节点添加到要在其上显示购物车的路线:
...
{
path: 'with-cart',
component: YourComponent,
data: { displayCar: true }
},
{
path: 'without-cart',
component: YourComponent,
},
...
使用解析器(中的详细信息),您可以读取此数据参数并在服务上进行设置:
@Injectable({
providedIn: 'root',
})
export class CartResolverService implements Resolve<boolean> {
constructor(private yourService: YourService) {}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
this.yourService.setDisplayCart(route.data.displayCart)
return of(route.data.displayCart === true);
}
}
而且,您的nav需要订阅此服务,以便它可以执行更改。这是一个很棒的解决方案,但由于每条路线都使用顶级nav,我需要将
解析器添加到每条路线上,即使在top nav的NavigationEnd
中检查路由url,如果url路径与仅将购物车设置为禁用时应启用购物车的路径不同,这是否也是一个好的解决方案?您始终可以执行相反的操作,这是一个隐藏购物车(而不是显示购物车)的变量然后将解析程序添加到要隐藏它的位置,然后您可以从主组件订阅路由更改,并将购物车设置为在事件导航开始()上可见,实际上与我之前设置的任何其他路由相同isCartEnabled为false,我只需将解析程序添加到我需要的路径,谢谢!
{
path: 'with-cart',
component: YourComponent,
data: { displayCar: true },
resolve: {
cartResolver: CartResolverService,
},
},
{
path: 'without-cart',
component: YourComponent,
resolve: {
cartResolver: CartResolverService,
},
},