Angular2父子组件之间数据传递:@Input和@Output (上) ...

为了让大家学习起来轻松、易懂,小编尽量做到篇幅短,语言通俗易懂,知识点分段来讲,以免太长了看起来很累,也很容易失去耐心阅读下去,希望大家理解和支持,同时希望大家点赞和分享出去,让更多的志同道合的朋友来学习


Angular 提供了@Input和@Output语法来处理组件数据的流入流出,接下来我们通过@Input和@Output来演示父子组建之间的数据传递


父组件向子组件传递数据

父组件传递数据到子组件通过@Input方式的现实方式

第一步:定义父组件
ParentComponent.ts(父组件)

import {Component, OnInit} from '@angular/core';

@Component({
selector: 'app-parent',
 
templateUrl: './parent.component.html',
 
styleUrls: ['./parent.component.css']
})

export class ParentComponent {

private user: Object = {
name: '',
   
age: '',
   
number: ''
 
};
 
private parent_data: any;

 
next() {
this.parent_data = this.user;
 
}

}

(1).这里定义了两个类属性user和parent_data,

(2).一个next()方法,next方法用于将页面输入的数据赋值给parent_data属性


ParentComponent.html(父组件模版)

class="parent_div">
 

父组件


 

   
   type="text" [(ngModel)]="user.name">
 

 

   
   type="text" [(ngModel)]="user.age">
 

 

   
   type="text" [(ngModel)]="user.number">
   type="button" value="传递数据到子组件" (click)="next()">
 


 

 
[data]="parent_data">
 


对应的页面:

Angular2父子组件之间数据传递:@Input和@Output (上) ..._第1张图片

表单输入数据,点击页面上的按钮,调用页面next()方法

(click)="next()"

next()方法内部将输入的数据user赋值给parent_data。parent_data获取到数据之后在模版中把获取到的值再赋给子组件中先前定义好的data变量



[data]="parent_data">

到这里父组件就完成 类数据的传递,下面我们看看子组件怎么去接受这个值?


第二步:定义子组件:
ChildenComponent.ts(子组件)

import {Component, OnChanges, Input} from '@angular/core';

@Component({
selector: 'app-childen',
 
templateUrl: './childen.component.html',
 
styleUrls: ['./childen.component.css']
})
export class ChildenComponent implements OnChanges {
@Input() data: string;

 
ngOnChanges() {
console.log(this.data);
 
}
}

(1).这里定义了一个类属性data,并且用@Input装饰器修饰,修饰过后的data变量就具备接受父组件传过来的数据了,这里定义的data就是在页面接收父组件传递的data变量,看下面代码

<app-childen [data]="parent_data">app-childen>

(2).还实现了一个onChanges接口,onChanges接口必须实现ngOnChanges方法,用来监控数据的变化,如果父组件的数据发生变化,我们这里就输出改变后的数据,父组件中表单输入的值发生变化,再点击按钮调用next()方法,ngonChanges会检测到数据变化,console.log(this.data)打印新的输出到控制台


下面我们看看效果

Angular2父子组件之间数据传递:@Input和@Output (上) ..._第2张图片


<完>


个人学习心得,大神路过,不喜勿喷

转载于:https://www.cnblogs.com/long328583644/p/7142113.html

你可能感兴趣的:(Angular2父子组件之间数据传递:@Input和@Output (上) ...)