angular父子组件之间的传值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了angular父子组件之间的传值相关的知识,希望对你有一定的参考价值。

参考技术A

父子组件的传值,是mvvm框架中必然绕不过去的话题,下面列举在angular中父子组件传值的各种方式。

即带有@Input装饰器,如下面两种方式:

父组件在引用子组件的标签的时候,通过 [ ] 符号将父组件的变量名赋值给该变量;

子组件通过在变量名前面加上@Input装饰器的方式,可以从父组件取值,实现父子组件的传值。

在第一种方案的基础上,使用一个输入属性setter,以拦截父组件中值的变化,并采取行动。

通过OnChanges生命周期钩子接口的ngOnChanges()方法来检测输入属性值的变化并做出回应。

子组件暴露一个EventEmitter属性,当事件发生时,子组件利用该属性emits(向上弹射)事件,父组件绑定这个事件属性,并在事件发生时做出回应。
子组件的EventEmitter属性是一个输入属性,通常带有@Output装饰器。
子组件:

父组件绑定一个事件处理器,用来响应子组件的事件。弹射出的事件,直接写在父组件引入子组件的位置上。

父组件不能使用数据绑定来读取子组件的属性或者调用子组件的方法。但可以在父组件模板里,新建一个本地变量来代表子组件,然后利用这个变量来读取子组件的属性和调用子组件的方法。

本地变量的写法是(# + 变量名)
在父组件中,把本地变量(#timer)放到子组件标签(<countdown-timer>)中,用来代表子组件,该父组件模板就得到子组件的引用,可以在父组件模板访问子组件的属性和方法。

上面那种本地变量的方式,有局限性,只能在父组件的模板中使用。如果在父组件的类中读取子组件的属性方法,就不能使用本地变量了。
当父组件类需要这种访问时,可以把子组件作为ViewChild,注入到父组件中。

首先,你必须导入对装饰器 ViewChild 以及生命周期钩子 AfterViewInit 的引用。
接着,通过 ViewChild 属性装饰器,将子组件 CountdownTimerComponent 注入到私有属性 timerComponent 里面。
ngAfterViewInit() 生命周期钩子是非常重要的一步。被注入的计时器组件只有在 Angular 显示了父组件视图之后才能访问.所以需要加上setTimeout()来等下一轮。

不会!rxjs看不懂!!!
不过可以通过redux存在统一的store树里面,增删改查都从这里取,变相实现传值。

以上是关于angular父子组件之间的传值的主要内容,如果未能解决你的问题,请参考以下文章

Vue组件之间的传值方法

Vue父子组件之间的传值

Vue父子组件之间的传值

Vue父子组件之间的传值

Vue之父子组件之间的传值

Vue--父子组件之间的传值