分享了什麼工作對我來說:
添加一個輸入角4應用
假設我們有兩個部分組成:
parent-component
child-component
我們想從parent-component
一些價值從parent-component.html
傳遞到child-component
即一個@Input
到child-component.ts
。下面是說明執行情況的例子:
parent-component.html
看起來是這樣的:
<child-component [someInputValue]="someInputValue"></child-component>
parent-component.ts
看起來是這樣的:
class ParentComponent {
someInputValue = 'Some Input Value';
}
child-component.html
看起來是這樣的:
<p>Some Input Value {{someInputValue}}</p>
child-component.ts
看起來是這樣的:
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
}
}
注意,@Input
值的值可用內ngOnInit()
,而不是內部constructor()
。
對象引用在角2/4
在Javascript中的行爲,對象存儲爲references。
這個確切的行爲可以被重新制作,具有角2/4,下列的說明是解釋執行的例子:
parent-component.ts
看起來是這樣的:
class ParentComponent {
someInputValue = {input: 'Some Input Value'};
}
parent-component.html
看起來是這樣的:
{{someInputValue.input}}
child-component.html
看起來是這樣的:
Some Input Value {{someInputValue}}
change input
child-component.ts
看起來是這樣的:
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";
}
}
功能changeInput()
會改變,因爲他們參考的someInputValue
都ChildComponent
& ParentComponent
內的值。因爲,someInputValue
從ParentComponent
引用的someInputValue
對象 - 在ChildComponent
變化的someInputValue
對象改變ParentComponent
的someInputValue
對象的值。 這是不正確的。引用永遠不會改變。
不要在模板中使用駝峯名。 HTML不區分大小寫。 – alexpods
謝謝alex!我想我必須改變這種習慣。 ; 0) – Zorthgo