如何在 Angular 8 中仅重新加载或刷新 child 组件
How to reload or refresh only child component in Angular 8
我有两个组件,一个 parent 和另一个 Child。
HTML 部分
<div>
<div class="row col-md-12">
<div class="col-md-4">
<!-- Some HTML Code of Parent component over here -->
</div>
<div class="col-md-8">
<child-component></child-component>
</div>
</div>
<button class="button" (click)="reloadOnlyChild($event)">Reload Child</button>
</div>
现在,单击此按钮时,我只希望 child 重新加载或刷新。
TS 部分
reloadOnlyChild(event){
// I want to reload the child from here.
}
我在网上搜索过,我得到的是 Vue 或 React,但不是 Angular。
假设您在 Child.Component.ts
中有一个表单,如果您想从 parent component
中重置它,您可以使用 Subject
.[=16= 在父子之间建立连接]
Parent.Component.html
<child-component [resetFormSubject]="resetFormSubject.asObservable()"></child-component>
<button (click)="resetChildForm()"></button>
Parent.Component.ts
import { Subject } from "rxjs";
resetFormSubject: Subject<boolean> = new Subject<boolean>();
resetChildForm(){
this.resetFormSubject.next(true);
}
Child.Component.ts
import { Subject } from "rxjs";
@Input() resetFormSubject: Subject<boolean> = new Subject<boolean>();
ngOnInit(){
this.resetFormSubject.subscribe(response => {
if(response){
yourForm.reset();
// Or do whatever operations you need.
}
}
}
通过使用 Subject,只要单击按钮,您就可以建立从父项到子项的连接。
希望这个回答对您有所帮助!干杯:)
您可以添加一个 Input 来更新组件,或者在 child 中添加一个您可以在代码中调用的更新函数。使用@ViewChild 从parent 调用child 更新函数。像这样
(https://stackblitz.com/edit/angular-updatechild):
Child:
import { Component } from "@angular/core";
@Component({
selector: "app-child",
templateUrl: "./child.component.html",
styleUrls: ["./child.component.css"]
})
export class ChildComponent {
ticks = Date.now().valueOf();
constructor() {}
update(): void {
this.ticks = Date.now().valueOf();
}
}
Parent:
import { Component, OnInit, ViewChild } from "@angular/core";
import { ChildComponent } from "./../child/child.component";
@Component({
selector: "app-parrent",
templateUrl: "./parrent.component.html",
styleUrls: ["./parrent.component.css"]
})
export class ParrentComponent implements OnInit {
@ViewChild(ChildComponent, { static: false }) childC: ChildComponent;
showChild: boolean = true;
constructor() {}
ngOnInit() {}
onUpdateChild() {
this.childC.update();
}
}
我们还可以使用 *ngIf
和 setTimeout
从父组件重置子组件而不对子组件进行任何更改。
.模板:
.ts:
show:boolean = true
resetChildForm(){
this.show = false;
setTimeout(() => {
this.show = true
}, 100);
}
当我们无法控制子组件(例如第 3 方库组件)时,这尤其有用。
更新子组件的最佳方法是:ngOnChanges()
ngOnChanges(): “当指令的任何数据绑定 属性 更改时调用的生命周期挂钩。定义一个 ngOnChanges() 方法来处理变化。”我们使用此生命周期挂钩来响应对我们的@Input() 变量的更改。
示例:
import { Component, Input, OnChanges } from "@angular/core";
@Component({
selector: "child-component",
templateUrl: "./child-component.html"
})
export class MyComponent implements OnChanges {
@Input() someInput: string;
constructor() {}
ngOnChanges() {
/**********THIS FUNCTION WILL TRIGGER WHEN PARENT COMPONENT UPDATES 'someInput'**************/
//Write your code here
console.log(this.someInput);
}
}
在父组件中使用子组件如下
<child-component [someInput]="inputValue"></child-component>
我有两个组件,一个 parent 和另一个 Child。
HTML 部分
<div>
<div class="row col-md-12">
<div class="col-md-4">
<!-- Some HTML Code of Parent component over here -->
</div>
<div class="col-md-8">
<child-component></child-component>
</div>
</div>
<button class="button" (click)="reloadOnlyChild($event)">Reload Child</button>
</div>
现在,单击此按钮时,我只希望 child 重新加载或刷新。
TS 部分
reloadOnlyChild(event){
// I want to reload the child from here.
}
我在网上搜索过,我得到的是 Vue 或 React,但不是 Angular。
假设您在 Child.Component.ts
中有一个表单,如果您想从 parent component
中重置它,您可以使用 Subject
.[=16= 在父子之间建立连接]
Parent.Component.html
<child-component [resetFormSubject]="resetFormSubject.asObservable()"></child-component>
<button (click)="resetChildForm()"></button>
Parent.Component.ts
import { Subject } from "rxjs";
resetFormSubject: Subject<boolean> = new Subject<boolean>();
resetChildForm(){
this.resetFormSubject.next(true);
}
Child.Component.ts
import { Subject } from "rxjs";
@Input() resetFormSubject: Subject<boolean> = new Subject<boolean>();
ngOnInit(){
this.resetFormSubject.subscribe(response => {
if(response){
yourForm.reset();
// Or do whatever operations you need.
}
}
}
通过使用 Subject,只要单击按钮,您就可以建立从父项到子项的连接。
希望这个回答对您有所帮助!干杯:)
您可以添加一个 Input 来更新组件,或者在 child 中添加一个您可以在代码中调用的更新函数。使用@ViewChild 从parent 调用child 更新函数。像这样
(https://stackblitz.com/edit/angular-updatechild):
Child:
import { Component } from "@angular/core";
@Component({
selector: "app-child",
templateUrl: "./child.component.html",
styleUrls: ["./child.component.css"]
})
export class ChildComponent {
ticks = Date.now().valueOf();
constructor() {}
update(): void {
this.ticks = Date.now().valueOf();
}
}
Parent:
import { Component, OnInit, ViewChild } from "@angular/core";
import { ChildComponent } from "./../child/child.component";
@Component({
selector: "app-parrent",
templateUrl: "./parrent.component.html",
styleUrls: ["./parrent.component.css"]
})
export class ParrentComponent implements OnInit {
@ViewChild(ChildComponent, { static: false }) childC: ChildComponent;
showChild: boolean = true;
constructor() {}
ngOnInit() {}
onUpdateChild() {
this.childC.update();
}
}
我们还可以使用 *ngIf
和 setTimeout
从父组件重置子组件而不对子组件进行任何更改。
.模板:
.ts:
show:boolean = true
resetChildForm(){
this.show = false;
setTimeout(() => {
this.show = true
}, 100);
}
当我们无法控制子组件(例如第 3 方库组件)时,这尤其有用。
更新子组件的最佳方法是:ngOnChanges()
ngOnChanges(): “当指令的任何数据绑定 属性 更改时调用的生命周期挂钩。定义一个 ngOnChanges() 方法来处理变化。”我们使用此生命周期挂钩来响应对我们的@Input() 变量的更改。
示例:
import { Component, Input, OnChanges } from "@angular/core";
@Component({
selector: "child-component",
templateUrl: "./child-component.html"
})
export class MyComponent implements OnChanges {
@Input() someInput: string;
constructor() {}
ngOnChanges() {
/**********THIS FUNCTION WILL TRIGGER WHEN PARENT COMPONENT UPDATES 'someInput'**************/
//Write your code here
console.log(this.someInput);
}
}
在父组件中使用子组件如下
<child-component [someInput]="inputValue"></child-component>