This question is quite simple but I can't get rid of it.
I have a <header>
in parent template and I need it disappear when displaying children template through routing module. What I expect is adding a class to the header tag so I can hide it via CSS. This is what I have:
app.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app',
template: `
<header [class.hidden]="hide">
<h1>My App</h1>
<ul>
<li><a href="/home"></a></li>
<li><a href="/showoff"></a></li>
</ul>
</header>
<router-outlet></router-outlet>
`
})
export class AppComponent {
hide = false; // <-- This is what I need to change in child component
}
app-routing.module.ts
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './welcome.component';
import { ShowOffComponent } from './show.off.component';
const routes: Routes = [
{ path: '', component: HomeComponent },
{ path: 'showoff', component: ShowOffComponent },
];
export const AppRouting = RouterModule.forRoot(routes, {
useHash: true
});
show.offf.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-showoff',
template: `
<h2>Show Off</h2>
<div>Some contents...</div>
`
})
export class ShowOffComponent {
hide = true; // <-- Here is the problem.
// I don't have any idea how to reach parent variables.
}
I have bumped into the same phenomena very recently with Angular 6.
I wanted to access and change a variable which is belongs to a parent or a grandparent Component. See the image below. I want to access and change a variable which is belongs to Tom, from Jim (who is a child of Tom) and Sara (who is a grandchild of Tom).
There might be some other solutions but the approach I have used to overcome this is by using
ViewContainerRef
. I have to inject theViewContainerRef
to the Child component's constructor, that I need to access the parent Component and traversed through the parent node (or nodes) to find the parent variable.Injecting to the constructor,
Accessing and traversing through to the parent node,
I have made a StackBlitz example with the scenario that I have given you in the above picture.
https://stackblitz.com/edit/angular-comms
Hope someone will find this useful.
Thank you.
You can use output emitter
In your child component,
In the parent,
In your
app.component.ts
you can check your URL and sethide
variable value as below :