Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何设置不同管线的组件属性?_Angular - Fatal编程技术网

Angular 如何设置不同管线的组件属性?

Angular 如何设置不同管线的组件属性?,angular,Angular,我的Angular应用程序中有一个top nav组件,在其中三条路线中,我必须在该组件中显示购物车,直到现在,我使用的是Behavior Subject服务,当我像在产品路线中一样导航时,我将其设置为true,然后在top nav中检查是否为true,我必须显示购物车 但现在我必须找到另一种方法,top nav组件中的某些东西可以检测我是否在“产品”路线中显示购物车,或者如果我在“商店”路线中隐藏购物车,因为我在使用重用路线,并且我无法将导航上的行为主题设置回“产品” 以下哪种方法最好 在top

我的Angular应用程序中有一个top nav组件,在其中三条路线中,我必须在该组件中显示购物车,直到现在,我使用的是Behavior Subject服务,当我像在产品路线中一样导航时,我将其设置为true,然后在top nav中检查是否为true,我必须显示购物车

但现在我必须找到另一种方法,top nav组件中的某些东西可以检测我是否在“产品”路线中显示购物车,或者如果我在“商店”路线中隐藏购物车,因为我在使用重用路线,并且我无法将导航上的行为主题设置回“产品”

以下哪种方法最好

在top nav的构造器中,我有以下内容:

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,
    },
  },