1. Передаем данные в компонент
<app-favorite [isFavorite]="true"></app-favorite>
// Favorite.comComponent.ts импортировать {Ввод} из '@angular/core'; класс экспорта FavoriteComponent { @Input() isFavorite: boolean = false; }
[Рекомендация по соответствующему руководству: «Урок по Angular»]
Примечание. Добавление []
вне атрибута означает привязку динамического значения. После получения его в компоненте это логический тип. Отсутствие []
означает привязку обычного значения. он в компоненте имеет字符串类型
.
<app-favorite [is-Favorite]="true"></app-favorite>
import { Input } from '@angular/core'; класс экспорта FavoriteComponent { @Input("is-Favorite") isFavorite: boolean = false }
2. Компоненту
необходимо передать данные наружу: передать данные родительскому компоненту, нажав кнопку в подкомпоненте
<!-- Шаблон подкомпонента--> <button (click)="onClick()">click</button>
// Импорт класса подкомпонента { EventEmitter, Output } из "@angular/core" класс экспорта FavoriteComponent { @Output() изменение = новый EventEmitter() onClick() { this.change.emit({ name: "Чжан Сан" }) } }
<!-- Шаблон родительского компонента --> <app-favorite (change)="onChange($event)"></app-favorite>
// Класс экспорта класса родительского компонента AppComponent { onChange(событие: {имя: строка}) { console.log(событие) } }
1. Фаза монтажа.
Функция жизненного цикла этапа монтажа выполняется только один раз во время этапа монтажа и больше не выполняется при обновлении данных.
1). Конструктор
Angular выполняется при создании экземпляра класса компонента и может использоваться для получения объекта экземпляра службы, внедренного Angular.
класс экспорта ChildComponent { конструктор (частный тест: TestService) { console.log(this.test) // "тест" } }
2), ngOnInit
выполняется после первого получения значения входного атрибута, и здесь можно выполнить запрошенную операцию.
<app-child name="Zhang San"></app-child>
класс экспорта ChildComponent реализует OnInit { @Input("имя") имя: строка = "" ngOnInit() { console.log(this.name) // "Чжан Сан" } }
3), ngAfterContentInit
вызывается после завершения первоначального рендеринга проекции контента.
<приложение-ребёнок> <div #box>Привет, Angular</div> </app-child>
класс экспорта ChildComponent реализует AfterContentInit { Поле @ContentChild("box"): ElementRef<HTMLDivElement> не определено | ngAfterContentInit() { console.log(this.box) // <div>Привет, Angular</div> } }
4), ngAfterViewInit
вызывается после визуализации представления компонента.
<!-- шаблон компонента app-child --> <p #p>app-child работает</p>
класс экспорта ChildComponent реализует AfterViewInit { @ViewChild("p") p: ElementRef<HTMLParagraphElement> не определено | нгАфтервиевинит () { console.log(this.p) // <p>app-child работает</p> } }
2. Фаза обновления
1), ngOnChanges
выполняется при изменении значения входного атрибута, а также выполняется один раз во время первоначальной настройки. Порядок лучше, чем ngOnInit.
Независимо от того, сколько входных атрибутов изменяется одновременно, функция перехвата будет работать. выполняется только один раз, и измененные значения будут сохранены одновременно. В параметрах
тип параметра — SimpleChanges, а тип подсвойства — SimpleChange.
Для базовых типов данных его можно обнаружить, пока. изменения значений
. Для ссылочных типов данных он может обнаружить изменение одного объекта на другой, но обнаружение не может. Изменения значений свойств в одном и том же объекте не влияют на данные обновления шаблона компонента.
Изменение значений базового типа данных
<app-child [name]="name" [age]="age"></app-child> <button (click)="change()">change</button>
класс экспорта AppComponent { name: string = "Чжан Сан"; возраст: число = 20 изменять() { this.name = "李思" this.age = 30 } }
Класс экспорта ChildComponent реализует OnChanges { @Input("имя") имя: строка = "" @Input("возраст") возраст: число = 0 ngOnChanges (изменения: SimpleChanges) { console.log("Можно обнаружить изменения в значениях базовых типов данных") } }
Изменение ссылочного типа данных
<app-child [person]="person"></app-child> <button (click)="change()">change</button>
класс экспорта AppComponent { person = { name: "张三", возраст: 20 } изменять() { this.person = { name: "李思", возраст: 30 } } }
Класс экспорта ChildComponent реализует OnChanges { @Input("person") person = { name: "", age: 0 } ngOnChanges (изменения: SimpleChanges) { console.log("Для ссылочных типов данных могут быть обнаружены только изменения в ссылочном адресе, изменения в атрибутах объекта не могут быть обнаружены") } }
2), ngDoCheck: в основном используется для отладки, пока изменяются входные атрибуты, будь то базовый тип данных, ссылочный тип данных или изменение атрибута ссылочного типа данных, он будет выполнен.
3), ngAfterContentChecked: выполняется после завершения обновления проекции контента.
4), ngAfterViewChecked: выполняется после обновления представления компонента.
3. Фаза удаления
1), ngOnDestroy
вызывается перед уничтожением компонента и используется для операций очистки.
класс экспорта HomeComponent реализует OnDestroy { ngOnDestroy() { console.log("Компонент удален") } }