分享对我有用的东西:
向Angular 4应用添加输入
假设我们有2个组成部分:
parent-component
child-component
我们希望将一些值从传递parent-component
到,child-component
即@Input
从parent-component.html
传递到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);
}
ngOnInit() {
console.log('someInputValue in ngOnInit ************** ', this.someInputValue);
}
}
请注意,该值的@Input
值在内部可用ngOnInit()
,而在内部不可用constructor()
。
Angular 2/4中的对象引用行为
在Javascript中,对象存储为reference。
可以在Angular 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);
}
ngOnInit() {
console.log('someInputValue in ngOnInit ************** ', this.someInputValue);
}
changeInput(){
this.someInputValue.input += " changed";
}
}
该函数changeInput()
将更改&someInputValue
内的值,因为它们的引用。因为,从引用的对象-在变化的对象的值改变的对象。这不是正确的。参考不得更改。ChildComponent
ParentComponent
someInputValue
ParentComponent
someInputValue
ChildComponent
someInputValue
ParentComponent
someInputValue