环境:
- Angular CLI: 11.0.6
- Angular: 11.0.7
- Node: 12.18.3
- npm : 6.14.6
- IDE: Visual Studio Code
1. 摘要
组件之间传递数据,最主要的就是父子组件之间传递数据, 例如:
<parent-component>
<child-component></child-component>
</parent-component>
父组件传入数据给子组件,同时,子组件数据发生变化是,希望能够通知父组件。
Angular 中,@input() 和 @Output() 为子组件提供了一种与其父组件通信的方法。 @input() 允许父组件更新子组件中的数据。相反,@Output() 允许子组件向父组件发送数据。
2. 父传子 @input()
2.1. 子组件定义@input()
子组件中的 @input() 装饰器表示该属性可以从其父组件中获取值。
例如:
export class ChildComponent {
@input() message: string;
}
<p>
Parent says: {{message}}
</p>
2.2. 父组件传递变量给子组件
当父组件调用子组件时,可以把父组件的变量(如messagetochild
) 传递给子组件
<child-component [message]="messagetochild"></child-component>
子组件中,可以更改
message
这个传入的变量,但是其作用域只在子组件中,父组件拿不到更改后的结果。(如何传给父组件,请接着看)
3. 子传父 @Output()
Angular通过事件(Event)来实现子组件通知父组件数据的改变,父组件需要订阅该事件。
3.1. 子组件定义@Output
子组件定义@Output
export class ChildComponent {
// EventEmitter ,这意味着它是一个事件
// new EventEmitter<string>() -
// 使用 Angular 来创建一个新的事件发射器,它发出的数据是 string 类型的。
@Output() newItemEvent = new EventEmitter<string>();
addNewItem(value: string) {
this.newItemEvent.emit(value);
}
}
子组件当数据发生变化时,调用这个addNewItem
方法既可。例如,html中
<label>Add an item: <input #newItem></label>
<button (click)="addNewItem(newItem.value)">Add to parent's list</button>
3.2. 父组件订阅事件
addItem(newItem: string) {
// logic here
}
- 父组件的html中,订阅该事件。
<child-component (newItemEvent)="addItem($event)"></child-component>
事件绑定 (newItemEvent)='addItem($event)'
会把子组件中的 newItemEvent 事件连接到父组件的 addItem() 方法。
4. 总结
---------------- END ----------------
======================
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。