角度的 了解@ Input,@ Output和EventEmitter

哈Ha! 我向您展示foolishneo撰写的文章“了解Angular中的@ Input,@ Output和EventEmitter”

向所有希望积累有关Angular框架复杂性信息的人致以问候。

今天,我认为有必要更好地研究有关Angular组件之间的交互组织的信息,并开始练习用英语翻译我感兴趣的文章。

我希望对某些人来说, Medium文章的翻译对他们有用。

长期以来,我希望开始用英语翻译有用的文章,因此,我决定从一个简单的,不是很繁琐的,但可能是对文章现有知识的补充开始。 请注意,先生们...

对于Angular的新手来说, 输入输出装饰器可能会令人尴尬,尤其是当您尝试通过代码示例确定其用途时。 在本文中,我将尝试以最简单的方式来解释它们。

资料交换工具


首先, 输入输出装饰器的任务是在组件之间交换数据。 它们是一种用于将数据从一个组件发送到另一个组件的机制。

输入用于接收数据,而输出用于发送数据。 输出通过将数据公开为事件生产者(通常作为EventEmitter类的对象)来发送数据

因此,当您看到代码时,就像这样:

@Component({ selector: 'todo-item', ... }) export class TodoItemComponent { @Input() item @Output() onChange = new EventEmitter() } 

他的意思是:

  • 嘿,我希望有数据发送给我。 我将获取它们并将其保存为item属性的值
  • 顺便说一下,我将成为使用onChange属性发送数据的原因

假设您有一个包含TodoItem组件的TodoList组件。
TodoLis t组件模板中,您期望看到:

 ... <todo-item [item]="myTask" (onChange)="handleChange($event)" </todo-item> ... 

这是什么意思:

  • TodoList组件将数据值放入其myTask属性中,并将其传递给TodoItem组件
  • TodoItem组件传输的数据将由TodoList组件的handleChange()函数接收和处理。

足够的理论。 让我们来看一个例子。

@Input和Output起作用。


注意一个例子。

在这里,我创建了2个组件,它们是hello组件,它们嵌套在app组件中。 hello组件具有InputOutput

 hello.component.ts @Component({ selector: 'hello', template: ` <h3 (click)="onClick.emit('Neo')"> ... </h3> ` }) export class HelloComponent { @Input() myFriend: string @Output() onClick = new EventEmitter() } 

hello组件期望获得一个字符串值,并将其作为myFriend属性的值。

 @Input() myFriend: string 

每次单击它时, Output装饰器的onClick数据发送属性将向字符串“外界”传输一个包含“ Neo”内容的字符串。

 <h3 (click)="onClick.emit('Neo')"> 

以下是应用程序组件代码:

 app.component.ts export class AppComponent { ng = 'Angular' myName = 'Neo' upCase(st:string): void { ... } } app.component.html <hello myFriend="{{ ng }}" (onClick)="upCase($event)"></hello> <h3>My name is {{ myName }}</h3> 

请注意, 应用程序组件在其模板中使用hello component标签,该标签执行2个操作:

  • 使用ng属性将字符串“ Angular”的值传递 hello组件
  • 并从hello组件接收发送的值,并使用upCase()函数处理接收到的值:

 <hello myFriend="{{ ng }}" (onClick)="upCase($event)"> 

您可以在此处查看正在运行的应用程序

Source: https://habr.com/ru/post/zh-CN465247/


All Articles