angular2 @input和@output理解
先做个比方,然后奉上代码
比如:
<talk-cmp [talk]="someExp" (rate)="eventHandler($event.rating)">
input, [talk]="someExp" 这个标签可以理解为一个专门的监听器,监听父组件传递过来的someExp参数,并存入自身组件的talk变;好像是开了个后门,允许且只允许父组件的someExp进入,一旦进入立刻抓进一个叫talk的牢房,然后子组件中就可以通过@Input来定义这个变量talk然后使用它。
output ,(click)="eventHandler($event.rating) 这个意思是, 当子组件的click事件被触发,就执行父组件的eventHandler函数,并把子组件的参数$event.rating传递给父组件的eventHandler函数;就好像,当小孩子一哭(执行click事件),他的母亲立刻把他抱在怀里(执行母亲的eventHandler),同时母亲获得了小孩子的一些参数($event.rating)
1、@input()
父组件 father.component.ts 提供数据
import {Component} from "@angular/core";
@Component({
selector: "my-father",
templateUrl: "father.html"
})
export class FatherComponent {
data: Array<Object>;
constructor() {
this.data = [
{
"id": 1,
"name": "html"
},
{
"id": 2,
"name": "css"
},
{
"id": 3,
"name": "angular"
},
{
"id": 4,
"name": "ionic"
},
{
"id": 5,
"name": "node"
}
]
}
}
模板文件 father.html
<h1>父组件</h1>
// 包含子组件, 并使用属性传递数据过去
<my-child [info]="data"></my-child>
子组件 child.component.ts 获取数据
import {Component, Input} from "@angular/core";
@Component({
selector: "my-child",
templateUrl: "child.html"
})
export class ChildComponent {
// 使用@Input获取传递过来的数据
@Input()
info: Array<Object>;
constructor() {
}
}
子组件 child.html模板文件
<ul>
<li *ngFor="let item of info">
{{item.name}}
</li>
</ul>
2、@Output()
子组件three-link.component.ts
1. 引入
import {Component, OnInit, Output, EventEmitter} from "@angular/core";
2. 定义输出变量
export class ThreeLinkComponent {
province: string;
// 输出一下参数
@Output() provinceOut = new EventEmitter();
constructor() {
this.province = "陕西";
}
}
3. 事件出发,发射变量给父组件
provinceChange() {
// 选择省份的时候发射省份给父组件
this.provinceOut.emit(this.province);
}
父组件模板
<!--三级联动组件-->
<three-link (provinceOut)="recPro($event)"></three-link>
父组件
// 函数接受子函数传递过来的变量, 子函数中emit的时候触发这个函数。
recPro(event) {
this.province = event;
}
分享到:
相关推荐
Angular2 中的 @Input 和 @Output 详解 在 Angular2 中,@Input 和 @Output 是两个非常重要的装饰器,它们用于实现父子组件之间的数据传递和事件处理。在本文中,我们将深入了解 @Input 和 @Output 的理解和示例。 ...
本文介绍了Angular2 组件间通过@Input @Output通讯示例,分享给大家,具体如下: 父组件传给子组件: 子组件设置@Input属性,父组件即可通过设置html属性给子组件传值。 子组件: @Input() title:string; _name:...
Angular 提供了@Input和@Output语法来处理组件数据的流入流出,接下来我们通过@Input和@Output来演示父子组建之间的数据传递 父组件向子组件传递数据 父组件传递数据到子组件通过@Input方式的现实方式 第一步:定义...
之前已经给大家介绍了Angular 2父子组件数据传递之@Input和@Output的相关内容,下面这篇文章我们再进一步的进行介绍: 子组件向父组件传递数据使用事件传递是子组件向父组件传递数据最常用的方式,子组件需要实例化...
《Angular 4编程实战》(ng-book.2)是一本深度解析Angular开发的权威书籍,其随书代码库包含了丰富的示例和练习,帮助读者深入理解Angular 4框架的精髓。这个压缩包“ng-book.2.Angular.4.r60.2017.4.code-samples....
对于angular2中的Input和Output可以和AngularJS中指令作类比。 Input相当于指令的值绑定,无论是单向的(@)还是双向的(=)。都是将父作用域的值“输入”到子作用域中,然后子作用域进行相关处理。 Output相当于指令的...
import { Component, Input, Output, EventEmitter } from '@angular/core'; @Component({ selector: 'app-custom-dropdown', templateUrl: './custom-dropdown.component.html', styleUrls: ['./custom-...
6. **组件通信与销毁**: 创建的组件实例可以通过注入`Injector`来访问服务,也可以使用`@Input`和`@Output`进行父子组件间的通信。当不再需要组件时,调用`componentRef.destroy()`来销毁它。 在"Angular组件动态...
3. **@Input() 和 @Output() 装饰器**:在 TypeScript 类中,我们可以使用`@Input()`装饰器定义输入属性,`@Output()`装饰器定义输出事件。这样可以更清晰地声明组件之间的数据流向。 4. **服务(Services)**:...
在Angular CLI中,可以运行`ng generate component paginator`命令来快速生成一个名为`paginator`的组件。这将创建一个包含`paginator.component.ts`、`paginator.component.html`、`paginator.component.css`等文件...
这可能涉及到@Input装饰器和@Output装饰器,以及使用服务或EventEmitter来实现父子组件的通信。 十、操作DOM节点 虽然Angular试图通过数据绑定减少对DOM的直接操作,但有时仍需直接操作DOM。手册将介绍如何使用...
- **作用域**:组件具有自己的作用域,可以使用输入(Input)和输出(Output)装饰器来实现组件之间的通信。 #### 2. 服务(Service) - **定义**:服务主要用于封装业务逻辑,比如数据获取、计算等。服务可以通过...
- 输入输出属性`@Input()`和`@Output()`实现父子组件间的通讯。 - 中间人模式(Service)或事件总线模式处理跨级组件通信。 - 生命周期钩子如`ngOnInit`和`ngAfterViewInit`用于组件初始化和DOM操作。 7. **表单...
import { Component , OnInit , EventEmitter , Input , Output } from '@angular/core' ; @ Component ( { selector : 'app-greeter' , template : '<button (click)="onClick()">Say Hi</button>' ,...
一开始想到了@input和@output,然而由于并不是单纯的父子组件关系,而是包含路由的父子组件关系,所以并不能使用@input方法和@output方法。 然后去搜索一下,发现stackoverflow上有答案,用的是service来进行传参,...
通过@Input和@Output可以实现数据之间的传递,但是无法获取子组件的类属性和类方法,接下来我们通过局部变量方式实现获取子组件其他成员 第一步:定义子组件: ChildenComponent.ts (1).子组件中之定义了一个fun1...
import { Component, OnInit, Output, Input, EventEmitter } from '@angular/core'; @Component({ selector: 'twoway', template: ` <input [(ngModel)]="username"> <p>Hello {{username}}! ` }) ...