J'utilise @input
pour recevoir une propriété du composant parent afin d'activer une classe CSS dans l'un des éléments du composant enfant.
Je suis capable de recevoir la propriété du parent et aussi d'activer la classe. Mais cela ne fonctionne qu'une seule fois. La propriété que je reçois du parent est une donnée de type booléen et lorsque je lui donne le statut de false
du composant enfant, il ne change pas dans le composant parent.
Plunkr : https://plnkr.co/edit/58xuZ1uzvToPhPtOING2?p=preview
app.ts
import {Component, NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import { HeaderComponent } from './header';
import { SearchComponent } from './header/search';
@Component({
selector: 'my-app',
template: `
<app-header></app-header>
`,
})
export class App {
name:string;
constructor() {
}
}
@NgModule({
imports: [ BrowserModule ],
declarations: [ App, HeaderComponent, SearchComponent ],
bootstrap: [ App ]
})
export class AppModule {}
header.ts
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-header',
template: `<header>
<app-search [getSearchStatus]="isSearchActive"></app-search>
<button (click)="handleSearch()">Open Search</button>
</header>`
})
export class HeaderComponent implements OnInit {
isSearchActive = false;
handleSearch() {
this.isSearchActive = true
console.log(this.isSearchActive)
}
constructor() { }
ngOnInit() { }
}
en-tête/search.ts
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'app-search',
template: `<div id="search" [class.toggled]="getSearchStatus">
search
<button (click)="getSearchStatus = false" class="close">Close Search</button>
</div>`
})
export class SearchComponent implements OnInit {
@Input() getSearchStatus: boolean;
constructor() { }
ngOnInit() {
}
}
Veuillez vérifier les données ci-dessus. La fonction de recherche ouverte ne fonctionne qu'une seule fois. Après avoir fermé la recherche, elle ne se déclenche pas à nouveau.
Es @input
est le cas d'utilisation approprié pour ce scénario ? Veuillez m'aider à résoudre ce problème. (S'il vous plaît mettre à jour le plunker).