Angular не делает доступными данные @Input
, как только создается компонент. То есть это не доступно во время constructor()
.
Если вы хотите отключить, когда @Input
действительно отправлено (и повторно отправлено), используйте NgOnChanges:
import { Component, Input, OnChanges } from @angular/core';
@Component({
selector: 'app-foo',
})
export class FooComponent implements OnChanges {
@Input() visitors: IVisitor[];
ngOnChanges() {
if (this.visitors) {
console.log(this.visitors)
// do something with this.visitors
}
}
}
В качестве альтернативы вы можете использовать getter / setters для запуска чего-либо, когда оно отправляется Angular :
private _visitors: IVisitor[];
@Input() public set visitors(val: IVisitor[]) {
this._visitors = val;
}
// Also, guarantee to always return an array
public get visitors(): IVisitor[] {
if (this._visitors) {
return this._visitors;
}
return [];
}
Да, без явной настройки, и я не знаю, как это предотвратить.
Однако многие разделы конфигурации позволят вам очистить данные, унаследованные от родительских файлов.
Например,
<appSettings>
<clear/>
<add key=...>
</appSettings>
<connectionStrings>
<clear/>
<add ... />
</connectionStrings>
Вы также можете используйте тег remove
, чтобы избавиться от вещей, которые вы не хотите, или поместите все в место и запретите его наследовать:
<remove name="FooBar" />
<location path="." inheritInChildApplications="false">
<system.web>
...
</system.web>
</location>