angular父子组件,angular兄弟组件调用方法

  angular父子组件,angular兄弟组件调用方法

  本文带你了解Angular中的组件通信,介绍父子组件之间的通信和没有直接关系的组件之间的通信的方法。

  准备一下我们的环境:

  1.创建标题组件:ng g c组件/标题。

  应用程序按钮/应用程序按钮

  应用标题/应用标题

  app-button/app-buttonexport类HeaderComponent实现OnInit {

  构造函数(){}

  ngOnInit(): void {}

  }2.创建标题组件:ng g c组件/标题

  span { { title } }/span export class title component实现OnInit {

  title:string= title ;

  构造函数(){}

  ngOnInit(): void {}

  }3.创建一个按钮组件:ng g c组件/按钮

  button { { BTN name } }/button export class button component实现OnInit {

  public BTN name:string= button ;

  构造函数(){}

  ngOnInit(): void {}

  }直接调用

  适用于父子关系组件,注意点是直接调用使得父子组件的耦合性变高,要明确使用确实需要直接调用。

  1.把我们的header组件挂载到app中,这样app和header之间就形成了父子组件关系。

  2.使用#来命名我们的组件:app-header #header/app-header

  3.现在我们的header组件仍然是空的。让我们展开它。否则,我们叫什么?

  导出类HeaderComponent实现OnInit {

  public name:string= header component ;

  printName(): void {

  console.log(组件名为,this . name);

  }

  }4.组件扩展后,我们可以在父组件app中调用子组件头中的属性和函数。

  应用标题#标题/应用标题

  p

  调用子组件属性:{{ header.name }}

  button(click)= header . print name()调用子组件函数/按钮

  /p5。第四步是在父组件的html模板中操作。有时候我们需要在父组件的ts类中操作子组件。接下来我们来演示一下。

  6.我们需要使用一个新的decorator @ViewChild(组件)

  导出类AppComponent {

  title=角度-航向;

  @ViewChild(HeaderComponent)

  私人头球!HeaderComponent

  //声明循环钩子:组件和子组件的视图更新后调用,执行一次。

  ngafterviewit():void {

  //调用子组件属性

  console . log(this . header . name);

  //调用子组件函数

  this . header . print name();

  }

  }@Input和@Output

  适用于父子关系组件

  1.我们在标题组件中定义标题,以解耦标题组件中直接调用所导致的扩展复杂性。

  2.将@ Input()decorator:@ Input()public title:string= title 添加到title组件的title属性中;

  3.给header组件添加title属性并赋值:public title: string=我是新标题;

  4.我们在header组件的html模板中这样使用title组件:app-title[title]= title /app-title

  5.我们一起来看看现在的效果。虽然界面很丑,但是下次用组件的时候设置标题是不是更方便?

  6.以上步骤实现了父组件的数据传递到子组件,那么我们来看看子组件的数据是如何传递到父组件的。让我们用@Output()装饰器实现下面的代码。

  7.在title组件的ts类中添加titleChange属性:@ output()public title change=new event emitter();

  8.在标题组件ts类中定期分发数据

  ngOnInit(): void {

  //定期分发子组件的数据。

  setInterval(()={

  this . title change . emit(this . title);

  }, 1500);

  }9.现在让我们修改header的父组件来接收发送的数据:

  应用程序标题

  [标题]=标题

  (title change)= onChildTitleChange($ event)

  /app-titleonchildtitlchange(值:any) {

  console . log( onChildTitleChange:,value);

  }利用服务单利进行通信

  适用于无直接关系组件

  1.既然要通过服务进行通信,那就先创建一个服务:ng g s services/EventBus,我们声明一个Subject类型的属性来辅助通信。

  @可注射({

  提供了:“根”,

  })

  导出类EventBusService {

  public event bus:Subject any=new Subject();

  构造函数(){}

  }2.为了省事,我们不会重新创建组件,因为我们header中的按钮组件和标题组件符合没有直接关系的组件。

  3.转换我们的按钮组件并添加一个click事件来触发triggerEventBus函数。

  导出类ButtonComponent实现OnInit {

  public BTN name:string= button ;

  构造函数(公共eventBusService:eventBusService){ }

  ngOnInit(): void {}

  public triggerEventBus(): void {

  This.eventbus.next(我是按钮组件);

  }

  }4.模拟标题组件中的数据采集

  导出类TitleComponent实现OnInit {

  构造函数(公共eventBusService:eventBusService){ }

  ngOnInit(): void {

  this . eventbus service . eventbus . subscribe((value)={

  console.log(值);

  });

  }

  }利用cookie、session或者localstorage进行通信

  1.这个很简单。我们仍然使用标题组件和按钮组件进行演示。这一次,我们将数据保存在标题组件中,并在按钮组件中获取数据。让我们来演示一下localstorage,其他都是一样的。

  2.将标题保存到title组件的ngOnInit()钩子中的local storage:window . local storage . setitem( title ,this . title);

  3.获取按钮组件中的数据:const title=window . local storage . getitem( title );

  结语:

  本文介绍了Angular的组件通信,为我们拆分组件的合理通信提供了保障。到目前为止,我们通过引入标签来使用组件。

  有关编程的更多信息,请访问:编程入门!角形组件就是这样交流的。父子组件通信的两种方法详情请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: