从其他组件调用ngOnInit方法

时间:2017-11-03 13:52:46

标签: angular

如果我有:

@Component({
  selector: 'app1',
  templateUrl: './app1.html',
})
export class A implement OnInit {

  ngOnInit() {

  }
}

@Component({
  selector: 'app2',
  templateUrl: './app2.html',
})
export class B implement OnInit {

  ngOnInit() {

  }
}

然后如何从A类调用B类的ngOnInit(),我的B类模板应该更新(渲染)?

2 个答案:

答案 0 :(得分:1)

好的所以这是@ViewChild()解决方案。 ViewChild允许您从父组件控制您的孩子。我们假设您有MyMain.component.ts和MyChild.component.ts(名称为' MyChildComponent')。

在您的父级中,创建一个变量:ViewChild(MyChildComponent)childComponent:MyChildComponent。现在您可以访问子函数和变量。

在父母

中创建一个功能
refreshChild(data) { this.childComponent.refreshFromParent(data); }

和你孩子的另一个

refreshFromParent(data) { this.data = data ... }

答案 1 :(得分:1)

为此,您必须使组分 B 可注射。我们为此使用 @Injectable() 并在其中使用一个提供程序作为providIn: 'root'。

组件 A

@Component({
  selector: 'app1',
  templateUrl: './app1.html',
})
export class A implement OnInit {
  constructor( private a: A ){}

  ngOnInit() {
      this.a.ngOnInit();
  }
}

组件 B

@Component({
  selector: 'app2',
  templateUrl: './app2.html',
})
@Injectable({
  providedIn: 'root',
})
export class B implement OnInit {

  ngOnInit() {

  }
}

这对我有用,请告诉我这是否有效