Teilen, was für mich funktioniert hat:
Hinzufügen einer Eingabe zur Angular 4-App
Angenommen, wir haben 2 Komponenten:
parent-component
child-component
Wir wollten einen Wert von parent-componentbis übergeben, child-componentdh einen @Inputvon parent-component.htmlbis child-component.ts. Unten finden Sie ein Beispiel, das die Implementierung erklärt:
parent-component.html sieht aus wie das:
<child-component [someInputValue]="someInputValue"></child-component>
parent-component.ts sieht aus wie das:
class ParentComponent {
someInputValue = 'Some Input Value';
}
child-component.html sieht aus wie das:
<p>Some Input Value {{someInputValue}}</p>
child-component.ts sieht aus wie das:
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'child-component',
templateUrl: './child-component.html'
})
export class ChildComponent implements OnInit {
@Input() someInputValue: String = "Some default value";
@Input()
set setSomeInputValue(val) {
this.someInputValue += " modified";
}
constructor() {
console.log('someInputValue in constructor ************** ', this.someInputValue);
}
ngOnInit() {
console.log('someInputValue in ngOnInit ************** ', this.someInputValue);
}
}
Beachten Sie, dass der Wert des @InputWerts innerhalb ngOnInit()und nicht innerhalb verfügbar ist constructor().
Objektreferenzverhalten in Angular 2/4
In Javascript werden Objekte als Referenzen gespeichert .
Dieses genaue Verhalten kann mit Hilfe von Angular 2/4 wiederhergestellt werden. Nachfolgend finden Sie ein Beispiel, das die Implementierung erklärt:
parent-component.ts sieht aus wie das:
class ParentComponent {
someInputValue = {input: 'Some Input Value'};
}
parent-component.html sieht aus wie das:
{{someInputValue.input}}
child-component.html sieht aus wie das:
Some Input Value {{someInputValue}}
change input
child-component.ts sieht aus wie das:
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'child-component',
templateUrl: './child-component.html'
})
export class ChildComponent implements OnInit {
@Input() someInputValue = {input:"Some default value"};
@Input()
set setSomeInputValue(val) {
this.someInputValue.input += " set from setter";
}
constructor() {
console.log('someInputValue in constructor ************** ', this.someInputValue);
}
ngOnInit() {
console.log('someInputValue in ngOnInit ************** ', this.someInputValue);
}
changeInput(){
this.someInputValue.input += " changed";
}
}
Die Funktion changeInput()ändert den Wert von someInputValueinside sowohl ChildComponent& ParentComponentaufgrund ihrer Referenz. Da someInputValueaus verwiesen wird ParentComponent‚s someInputValue Objekt - die Änderung in ChildComponent‘ s - someInputValue Objekt ändert den Wert von ParentComponent‚s - someInputValue Objekt . Dies ist nicht richtig . Die Referenzen dürfen niemals geändert werden.