浅谈Angular中父子组件间怎么传递数据


本文摘自PHP中文网,作者青灯夜游,侵删。

本篇文章给大家介绍一下Angular中父子组件间传递数据的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

环境:

  • Angular CLI: 11.0.6
  • Angular: 11.0.7
  • Node: 12.18.3
  • npm : 6.14.6
  • IDE: Visual Studio Code

1. 摘要

组件之间传递数据,最主要的就是父子组件之间传递数据, 例如:

1

2

3

<parent-component>

  <child-component></child-component>

</parent-component>

父组件传入数据给子组件,同时,子组件数据发生变化是,希望能够通知父组件。

Angular 中,@Input() 和 @Output() 为子组件提供了一种与其父组件通信的方法。 @Input() 允许父组件更新子组件中的数据。相反,@Output() 允许子组件向父组件发送数据。【相关教程推荐:《angular教程》】

2. 父传子 @Input()

2.1. 子组件定义@Input()

子组件中的 @Input() 装饰器表示该属性可以从其父组件中获取值。

例如:

1

2

3

export class ChildComponent {

  @Input() message: string;

}

1、增加@Input() 装饰器的变量,除了数据可以从父组件传入后,其他逻辑和普通变量一致;

2、子组件的html代码中,既可使用message这个变量, 例如:

1

2

3

<p>

  Parent says: {{message}}

</p>

2.2. 父组件传递变量给子组件

当父组件调用子组件时,可以把父组件的变量(如messageToChild) 传递给子组件

1

<child-component [message]="messageToChild"></child-component>

子组件中,可以更改message这个传入的变量,但是其作用域只在子组件中,父组件拿不到更改后的结果。(如何传给父组件,请接着看)

3. 子传父 @Output()

Angular通过事件(Event)来实现子组件通知父组件数据的改变,父组件需要订阅该事件。

3.1. 子组件定义@Output

子组件定义@Output

1

2

3

4

5

6

7

8

9

10

11

export class ChildComponent {

 

  // EventEmitter ,这意味着它是一个事件

  // new EventEmitter<string>() -

  // 使用 Angular 来创建一个新的事件发射器,它发出的数据是 string 类型的。

  @Output() newItemEvent = new EventEmitter<string>();

 

  addNewItem(value: string) {

    this.newItemEvent.emit(value);

  }

}

子组件当数据发生变化时,调用这个addNewItem方法既可。例如,html中

1

2

<label>Add an item: <input #newItem></label>

<button (click)="addNewItem(newItem.value)">Add to parent's list</button>

3.2. 父组件订阅事件

1、父组件的ts代码中,增加一个处理上面事件的方法,例如

1

2

3

addItem(newItem: string) {

    // logic here

}

2、父组件的html中,订阅该事件。

1

<child-component (newItemEvent)="addItem($event)"></child-component>

事件绑定 (newItemEvent)='addItem($event)' 会把子组件中的 newItemEvent 事件连接到父组件的 addItem() 方法。

4. 总结

  • 使用@Input() 和 @Output() 可以很方便的实现父子组件之间的数据传递、共享。

  • 可以同时使用 @Input() 和 @Output()

更多编程相关知识,请访问:编程入门!!

以上就是浅谈Angular中父子组件间怎么传递数据的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

Angular中的firebase身份验证(代码示例)

如何安装和使用Angular cli?(图文详解)

谈谈ngroute路径出现#!#问题怎么解决?

深入了解Angular中的模块和懒加载

Angular8如何封装http服务

聊聊Angular中的指令(directive)

12个关于Angular的经典面试题

浅谈Angular项目中如何引入第三方ui库(Angular material)

浅谈Angular中父子组件相互传参的方法

浅谈Angular如何借助第三方组件和懒加载技术进行性能优化

更多相关阅读请进入《Angular》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    暂无评论...