【问题标题】:How to access child page components from parent page router links in Angular 6如何从 Angular 6 中的父页面路由器链接访问子页面组件
【发布时间】:2019-07-24 03:48:15
【问题描述】:

在 app.component.html 中,我有一个顶部菜单栏,其中包含 3 个链接 命名为 Home、About 和 contactus。 如果我单击主页链接,那么我应该显示主页的左侧菜单栏(Home.component.html) 如果我点击关于链接,那么我应该显示关于页面的左侧菜单栏(About.component.html) 所以我的问题是“如何访问主页,关于页面 div 即左菜单栏从我的主页(app.component)图像按钮单击。

app.component.html

<nav class="navbar navbar-dark bg-dark mb-5">
  <img src="src/assets/images/ham1.png" (click)="ShowLeftMenubar();">
 <div class="navbar-nav">
   <a class="nav-item nav-link" routerLink="homepage">Home</a>
<a class="nav-item nav-link active" routerLink="aboutpage">ABOUT</a>
 <a class="nav-item nav-link active" routerLink="contactpage">CONTACTUS</a>
</div>
</nav>
<router-outlet></router-outlet>

Home.component.html

<div id="leftmenubar"  class="leftmenuclass">
  <a routerLink="showcontent">sample1 </a>
  <a routerLink="showcontent">sample2 </a>
  <a routerLink="showcontent">sample3 </a>
</div>

关于page.component.html

<div id="leftmenubar"  class="leftmenuclass">
  <a routerLink="showcontent">sample3 </a>
  <a routerLink="showcontent">sample4 </a>
  <a routerLink="showcontent">sample5 </a>
</div>

【问题讨论】:

  • 什么不工作,如果你将它路由到主页,那么它会在这里工作没有问题。你有什么问题吗
  • 请添加路由配置
  • 路由完美运行。当我从我的 app.component 单击图像按钮时,主页中的 div(leftmenubar) 应该隐藏。同样,如果我单击 app.component 中的图像按钮,那么它应该在主页上显示 leftmenubar(div)。
  • 我希望通过创建一个带有主题的服务来解决你的问题。检查我的回答。

标签: html angular typescript angular6


【解决方案1】:

在服务 myservice.service.ts 中创建Subject,如下所示:

在您的 myservice.service.ts 中

public sidebar$ = new Subject<boolean>();

在您的 app.component.ts 中,在构造函数中导入 myservice 然后创建一个标志,如下所示:

public isShowMenu = true;
constructor(private myservice: MyService){}

当用户点击图片时

ShowLeftMenubar() {
  this.isShowMenu = !this.isShowMenu;
  this.myservice.sidebar$.next(this.isShowMenu);
}

在你的 home.component.ts 和 about.component.ts 中,你应该使用 ngOnInit 中的 subscribe 方法来监听 Subject

public isShowSidebar = false;
constructor(private myservice: MyService){}
ngOnInit() {
  this.myservice.sidebar$.subscribe((value) => this.isShowSidebar = value);
}

在 home.component.html 和 about.component.html 中

<div *ngIf="isShowSidebar" id="leftmenubar"  class="leftmenuclass">
  <a routerLink="showcontent">sample1 </a>
  <a routerLink="showcontent">sample2 </a>
  <a routerLink="showcontent">sample3 </a>
</div>

【讨论】:

  • 哇。很好的答案,我很高兴 Nithi,它有效,谢谢。
  • 我是否可以从我的父组件(即app.component)访问子组件div id(即leftmenubar)和类leftmenuclass
猜你喜欢
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
相关资源
最近更新 更多