condividere ciò che ha funzionato per me:
Aggiunta di un ingresso al angolare 4 app
Supponendo che abbiamo 2 componenti:
parent-component
child-component
Volevamo passare qualche valore da parent-component
a child-component
cioè un @Input
da parent-component.html
a child-component.ts
. Di seguito è riportato un esempio che spiega l'attuazione:
parent-component.html
assomiglia a questo:
<child-component [someInputValue]="someInputValue"></child-component>
parent-component.ts
assomiglia a questo:
class ParentComponent {
someInputValue = 'Some Input Value';
}
child-component.html
assomiglia a questo:
<p>Some Input Value {{someInputValue}}</p>
child-component.ts
assomiglia a questo:
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); //someInputValue in constructor ************** undefined
}
ngOnInit() {
console.log('someInputValue in ngOnInit ************** ', this.someInputValue); //someInputValue in ngOnInit ************** Some Input Value
}
}
Si noti che il valore del valore @Input
è disponibile all'interno ngOnInit()
e non all'interno constructor()
.
oggetti di riferimento comportamento angolare 2/4
In JavaScript, gli oggetti vengono memorizzati come references.
Questo comportamento esatto può essere ri-prodotto con l'aiuto di Angolare 2/4. Di seguito è riportato un esempio che spiega l'attuazione:
parent-component.ts
assomiglia a questo:
class ParentComponent {
someInputValue = {input: 'Some Input Value'};
}
parent-component.html
assomiglia a questo :
{{someInputValue.input}}
child-component.html
assomiglia a questo:
Some Input Value {{someInputValue}}
change input
child-component.ts
aspetto:
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); //someInputValue in constructor ************** undefined
}
ngOnInit() {
console.log('someInputValue in ngOnInit ************** ', this.someInputValue); //someInputValue in ngOnInit ************** Some Input Value
}
changeInput(){
this.someInputValue.input += " changed";
}
}
La funzione changeInput()
cambierà il valore di someInputValue
all'interno sia ChildComponent
& ParentComponent
causa del loro riferimento. Dal momento che, someInputValue
viene fatto riferimento da ParentComponent
's someInputValue
oggetto - la variazione ChildComponent
' s someInputValue
oggetto modifica il valore di ParentComponent
s' someInputValue
oggetto. QUESTO NON E 'CORRETTO. I riferimenti non devono mai essere modificati.
Non utilizzare nomi CamelCase nei template. HTML non fa distinzione tra maiuscole e minuscole. – alexpods
Grazie alex! Credo di dover cambiare quell'abitudine. ; 0) – Zorthgo