zoukankan      html  css  js  c++  java
  • Angular2父子组件之间数据传递:@Input和@Output (上) 2017-07-09 17:01 3人阅读 评论(0) 收藏

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


    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(父组件模版)

    <div class="parent_div">
     <p>
    父组件</p>
     <div>
       <label>
    姓名:</label>
       <input
    type="text" [(ngModel)]="user.name">
     </div>
     <div>
       <label>
    年龄:</label>
       <input
    type="text" [(ngModel)]="user.age">
     </div>
     <div>
       <label>
    电话:</label>
       <input
    type="text" [(ngModel)]="user.number">
       <input
    type="button" value="传递数据到子组件" (click)="next()">
     </div>

     
    <!---子组件指令 start-->
     
    <app-childen [data]="parent_data"></app-childen>
     
    <!---子组件指令 end-->
    </div>

    对应的页面:

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

    (click)="next()"

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


    <!---子组件指令 start-->
    <app-childen [data]="parent_data"></app-childen>
    <!---子组件指令 end-->

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


    第二步:定义子组件:
    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)打印新的输出到控制台


    下面我们看看效果


    <完>


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

  • 相关阅读:
    jQuery 原理的模拟代码 0 目录
    非真实渲染技术(NPR)1.卡通渲染
    [翻译]延迟着色(1)
    Bloom原理
    bloom, Fake HDR, True HDR(转)
    [翻译]延迟着色(2)
    STL中map与hash_map容器的选择
    将文本转换成IDirect3DTexture9
    D3D中的AGP内存、系统内存、显存的理解
    如何加强角色渲染的真实感(self shadow + subsurface scattering + rim lighting)
  • 原文地址:https://www.cnblogs.com/long328583644/p/7142113.html
Copyright © 2011-2022 走看看