부모 클래스에서 자식 구성 요소 메서드 호출-Angular
호출하려는 메서드가있는 자식 구성 요소를 만들었습니다.
이 메서드를 호출하면 console.log()
줄만 시작하고 test
속성을 설정하지 않습니까 ??
아래는 변경 사항이 적용된 빠른 시작 Angular 앱입니다.
부모의
import { Component } from '@angular/core';
import { NotifyComponent } from './notify.component';
@Component({
selector: 'my-app',
template:
`
<button (click)="submit()">Call Child Component Method</button>
`
})
export class AppComponent {
private notify: NotifyComponent;
constructor() {
this.notify = new NotifyComponent();
}
submit(): void {
// execute child component method
notify.callMethod();
}
}
아이
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'notify',
template: '<h3>Notify {{test}}</h3>'
})
export class NotifyComponent implements OnInit {
test:string;
constructor() { }
ngOnInit() { }
callMethod(): void {
console.log('successfully executed.');
this.test = 'Me';
}
}
test
속성도 어떻게 설정할 수 있습니까?
다음을 사용하여이 작업을 수행 할 수 있습니다 @ViewChild
더 많은 정보 확인이에 대한 링크
유형 선택기 포함
@Component({
selector: 'child-cmp',
template: '<p>child</p>'
})
class ChildCmp {
doSomething() {}
}
@Component({
selector: 'some-cmp',
template: '<child-cmp></child-cmp>',
directives: [ChildCmp]
})
class SomeCmp {
@ViewChild(ChildCmp) child:ChildCmp;
ngAfterViewInit() {
// child is set
this.child.doSomething();
}
}
문자열 선택기 사용
@Component({
selector: 'child-cmp',
template: '<p>child</p>'
})
class ChildCmp {
doSomething() {}
}
@Component({
selector: 'some-cmp',
template: '<child-cmp #child></child-cmp>',
directives: [ChildCmp]
})
class SomeCmp {
@ViewChild('child') child:ChildCmp;
ngAfterViewInit() {
// child is set
this.child.doSomething();
}
}
이것은 나를 위해 일했습니다! Angular 2의 경우 부모 구성 요소에서 자식 구성 요소 메서드 호출
Parent.component.ts
import { Component, OnInit, ViewChild } from '@angular/core';
import { ChildComponent } from '../child/child';
@Component({
selector: 'parent-app',
template: `<child-cmp></child-cmp>`
})
export class parentComponent implements OnInit{
@ViewChild(ChildComponent ) child: ChildComponent ;
ngOnInit() {
this.child.ChildTestCmp(); }
}
Child.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'child-cmp',
template: `<h2> Show Child Component</h2><br/><p> {{test }}</p> `
})
export class ChildComponent {
test: string;
ChildTestCmp()
{
this.test = "I am child component!";
}
}
가장 쉬운 방법은 Subject를 사용하는 것입니다. 아래 예제 코드에서 'tellChild'가 호출 될 때마다 자녀에게 알림이 전송됩니다.
Parent.component.ts
import {Subject} from 'rxjs/Subject';
...
export class ParentComp {
changingValue: Subject<boolean> = new Subject();
tellChild(){
this.changingValue.next(true);
}
}
Parent.component.html
<my-comp [changing]="changingValue"></my-comp>
Child.component.ts
...
export class ChildComp implements OnInit{
@Input() changing: Subject<boolean>;
ngOnInit(){
this.changing.subscribe(v => {
console.log('value is changing', v);
});
}
Stackblitz의 작업 샘플
user6779899's answer is neat and more generic However, based on the request by Imad El Hitti, a light weight solution is proposed here. This can be used when a child component is tightly connected to one parent only.
Parent.component.ts
export class Notifier {
valueChanged: (data: number) => void = (d: number) => { };
}
export class Parent {
notifyObj = new Notifier();
tellChild(newValue: number) {
this.notifyObj.valueChanged(newValue); // inform child
}
}
Parent.component.html
<my-child-comp [notify]="notifyObj"></my-child-comp>
Child.component.ts
export class ChildComp implements OnInit{
@Input() notify = new Notifier(); // create object to satisfy typescript
ngOnInit(){
this.notify.valueChanged = (d: number) => {
console.log(`Parent has notified changes to ${d}`);
// do something with the new value
};
}
}
Angular – Call Child Component’s Method in Parent Component’s Template
You have ParentComponent and ChildComponent that looks like this.
parent.component.html
parent.component.ts
import {Component} from '@angular/core';
@Component({
selector: 'app-parent',
templateUrl: './parent.component.html',
styleUrls: ['./parent.component.css']
})
export class ParentComponent {
constructor() {
}
}
child.component.html
<p>
This is child
</p>
child.component.ts
import {Component} from '@angular/core';
@Component({
selector: 'app-child',
templateUrl: './child.component.html',
styleUrls: ['./child.component.css']
})
export class ChildComponent {
constructor() {
}
doSomething() {
console.log('do something');
}
}
When serve, it looks like this:
When user focus on ParentComponent’s input element, you want to call ChildComponent’s doSomething() method.
Simply do this:
- Give app-child selector in parent.component.html a DOM variable name (prefix with # – hashtag), in this case we call it appChild.
- Assign expression value (of the method you want to call) to input element’s focus event.
The result:
참고URL : https://stackoverflow.com/questions/38974896/call-child-component-method-from-parent-class-angular
'IT story' 카테고리의 다른 글
SQL Server 브라우저를 시작할 수 없습니다. (0) | 2020.09.15 |
---|---|
Roslyn없이 웹 사이트 게시 (0) | 2020.09.15 |
CSS 만 사용하여 텍스트를 숨기고 표시 할 수 있습니까 (JavaScript 코드 없음)? (0) | 2020.09.15 |
Log4j XML 구성 파일을 사용하여 Hibernate 로깅을 구성합니까? (0) | 2020.09.15 |
라인과 지점 커버리지의 차이점 (0) | 2020.09.15 |