Ich verwende @input
, um eine Eigenschaft von Elternkomponente zu erhalten, um eine CSS-Klasse in einem Element der Kindkomponente zu aktivieren.Aktualisiere Parent-Komponente-Eigenschaft von Kind-Komponente in Angular 2
Ich bin in der Lage, die Eigenschaft von Eltern zu erhalten und auch die Klasse zu aktivieren. Aber das funktioniert nur einmal. Die Eigenschaft, die ich von Parent erhalte, ist ein boolescher Datentyp, und wenn ich den Status davon auf false
von einer untergeordneten Komponente aus einstelle, ändert sie sich nicht im übergeordneten Element.
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() { }
}
header/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() {
}
}
Bitte überprüfen Sie den oben angegebenen Kolben. Die offene Suche funktioniert nur einmal. Nach dem Schließen der Suche wird es nicht erneut ausgelöst.
Ist @input
der richtige Anwendungsfall für dieses Szenario? Bitte helfen Sie mir, das zu beheben. (Bitte aktualisieren Sie den Plocker).
Wo setzen Sie 'this.isSearchActive = false;' nachdem es in 'handleSearch()' auf 'true' gesetzt wurde? –
in header/search.ts '